var HOTCITYSLIST = [
    ["310100", "上海", "310000"],
    ["110100", "北京", "110000"],
    ["440100", "广州", "440000"],
    ["440300", "深圳", "440000"],
    ["320500", "苏州", "320000"],
    ["320200", "无锡", "320000"],
    ["330200", "宁波", "330000"],
    ["330100", "杭州", "330000"],
    ["120100", "天津", "120000"],
    ["510100", "成都", "510000"],
    ["370200", "青岛", "370000"],
    ["500100", "重庆", "500000"],
    ["420100", "武汉", "420000"],
    ["320400", "常州", "320000"]
  ],
  PROVINCELIST = {
    "A-G": [
      ["340000", "安徽", "1"],
      ["110000", "北京", "1"],
      ["500000", "重庆", "1"],
      ["900000", "钓鱼岛", "1"],
      ["350000", "福建", "1"],
      ["440000", "广东", "1"],
      ["450000", "广西", "1"],
      ["520000", "贵州", "1"],
      ["620000", "甘肃", "1"]
    ],
    "H-K": [
      ["130000", "河北", "1"],
      ["220000", "吉林", "1"],
      ["230000", "黑龙江", "1"],
      ["320000", "江苏", "1"],
      ["360000", "江西", "1"],
      ["410000", "河南", "1"],
      ["420000", "湖北", "1"],
      ["430000", "湖南", "1"],
      ["460000", "海南", "1"],
      ["810000", "香港", "1"]
    ],
    "L-S": [
      ["140000", "山西", "1"],
      ["150000", "内蒙古", "1"],
      ["210000", "辽宁", "1"],
      ["310000", "上海", "1"],
      ["370000", "山东", "1"],
      ["510000", "四川", "1"],
      ["610000", "陕西", "1"],
      ["630000", "青海", "1"],
      ["640000", "宁夏", "1"],
      ["820000", "澳门", "1"]
    ],
    "T-Z": [
      ["120000", "天津", "1"],
      ["330000", "浙江", "1"],
      ["530000", "云南", "1"],
      ["540000", "西藏", "1"],
      ["650000", "新疆", "1"],
      ["710000", "台湾", "1"]
    ]
  },
  CITIESLIST = [
    ["110100", "北京市", "110000"],
    ["110101", "东城区", "110100"],
    ["110102", "西城区", "110100"],
    ["110105", "朝阳区", "110100"],
    ["110106", "丰台区", "110100"],
    ["110107", "石景山区", "110100"],
    ["110108", "海淀区", "110100"],
    ["110109", "门头沟区", "110100"],
    ["110111", "房山区", "110100"],
    ["110112", "通州区", "110100"],
    ["110113", "顺义区", "110100"],
    ["110114", "昌平区", "110100"],
    ["110115", "大兴区", "110100"],
    ["110116", "怀柔区", "110100"],
    ["110117", "平谷区", "110100"],
    ["110118", "密云区", "110100"],
    ["110119", "延庆区", "110100"],
    ["120100", "天津市", "120000"],
    ["120101", "和平区", "120100"],
    ["120102", "河东区", "120100"],
    ["120103", "河西区", "120100"],
    ["120104", "南开区", "120100"],
    ["120105", "河北区", "120100"],
    ["120106", "红桥区", "120100"],
    ["120110", "东丽区", "120100"],
    ["120111", "西青区", "120100"],
    ["120112", "津南区", "120100"],
    ["120113", "北辰区", "120100"],
    ["120114", "武清区", "120100"],
    ["120115", "宝坻区", "120100"],
    ["120116", "滨海新区", "120100"],
    ["120117", "宁河区", "120100"],
    ["120118", "静海区", "120100"],
    ["120119", "蓟州区", "120100"],
    ["130100", "石家庄市", "130000"],
    ["130102", "长安区", "130100"],
    ["130104", "桥西区", "130100"],
    ["130105", "新华区", "130100"],
    ["130107", "井陉矿区", "130100"],
    ["130108", "裕华区", "130100"],
    ["130109", "藁城区", "130100"],
    ["130110", "鹿泉区", "130100"],
    ["130111", "栾城区", "130100"],
    ["130121", "井陉县", "130100"],
    ["130123", "正定县", "130100"],
    ["130125", "行唐县", "130100"],
    ["130126", "灵寿县", "130100"],
    ["130127", "高邑县", "130100"],
    ["130128", "深泽县", "130100"],
    ["130129", "赞皇县", "130100"],
    ["130130", "无极县", "130100"],
    ["130131", "平山县", "130100"],
    ["130132", "元氏县", "130100"],
    ["130133", "赵县", "130100"],
    ["130181", "辛集市", "130100"],
    ["130183", "晋州市", "130100"],
    ["130184", "新乐市", "130100"],
    ["130200", "唐山市", "130000"],
    ["130202", "路南区", "130200"],
    ["130203", "路北区", "130200"],
    ["130204", "古冶区", "130200"],
    ["130205", "开平区", "130200"],
    ["130207", "丰南区", "130200"],
    ["130208", "丰润区", "130200"],
    ["130209", "曹妃甸区", "130200"],
    ["130224", "滦南县", "130200"],
    ["130225", "乐亭县", "130200"],
    ["130227", "迁西县", "130200"],
    ["130229", "玉田县", "130200"],
    ["130281", "遵化市", "130200"],
    ["130283", "迁安市", "130200"],
    ["130284", "滦州市", "130200"],
    ["130300", "秦皇岛市", "130000"],
    ["130302", "海港区", "130300"],
    ["130303", "山海关区", "130300"],
    ["130304", "北戴河区", "130300"],
    ["130306", "抚宁区", "130300"],
    ["130321", "青龙满族自治县", "130300"],
    ["130322", "昌黎县", "130300"],
    ["130324", "卢龙县", "130300"],
    ["130400", "邯郸市", "130000"],
    ["130402", "邯山区", "130400"],
    ["130403", "丛台区", "130400"],
    ["130404", "复兴区", "130400"],
    ["130406", "峰峰矿区", "130400"],
    ["130407", "肥乡区", "130400"],
    ["130408", "永年区", "130400"],
    ["130423", "临漳县", "130400"],
    ["130424", "成安县", "130400"],
    ["130425", "大名县", "130400"],
    ["130426", "涉县", "130400"],
    ["130427", "磁县", "130400"],
    ["130430", "邱县", "130400"],
    ["130431", "鸡泽县", "130400"],
    ["130432", "广平县", "130400"],
    ["130433", "馆陶县", "130400"],
    ["130434", "魏县", "130400"],
    ["130435", "曲周县", "130400"],
    ["130481", "武安市", "130400"],
    ["130500", "邢台市", "130000"],
    ["130502", "襄都区", "130500"],
    ["130503", "信都区", "130500"],
    ["130522", "临城县", "130500"],
    ["130523", "内丘县", "130500"],
    ["130524", "柏乡县", "130500"],
    ["130525", "隆尧县", "130500"],
    ["130526", "任县", "130500"],
    ["130527", "南和县", "130500"],
    ["130528", "宁晋县", "130500"],
    ["130529", "巨鹿县", "130500"],
    ["130530", "新河县", "130500"],
    ["130531", "广宗县", "130500"],
    ["130532", "平乡县", "130500"],
    ["130533", "威县", "130500"],
    ["130534", "清河县", "130500"],
    ["130535", "临西县", "130500"],
    ["130581", "南宫市", "130500"],
    ["130582", "沙河市", "130500"],
    ["130600", "保定市", "130000"],
    ["130602", "竞秀区", "130600"],
    ["130606", "莲池区", "130600"],
    ["130607", "满城区", "130600"],
    ["130608", "清苑区", "130600"],
    ["130609", "徐水区", "130600"],
    ["130623", "涞水县", "130600"],
    ["130624", "阜平县", "130600"],
    ["130626", "定兴县", "130600"],
    ["130627", "唐县", "130600"],
    ["130628", "高阳县", "130600"],
    ["130629", "容城县", "130600"],
    ["130630", "涞源县", "130600"],
    ["130631", "望都县", "130600"],
    ["130632", "安新县", "130600"],
    ["130633", "易县", "130600"],
    ["130634", "曲阳县", "130600"],
    ["130635", "蠡县", "130600"],
    ["130636", "顺平县", "130600"],
    ["130637", "博野县", "130600"],
    ["130638", "雄县", "130600"],
    ["130681", "涿州市", "130600"],
    ["130682", "定州市", "130600"],
    ["130683", "安国市", "130600"],
    ["130684", "高碑店市", "130600"],
    ["130700", "张家口市", "130000"],
    ["130702", "桥东区", "130700"],
    ["130703", "桥西区", "130700"],
    ["130705", "宣化区", "130700"],
    ["130706", "下花园区", "130700"],
    ["130708", "万全区", "130700"],
    ["130709", "崇礼区", "130700"],
    ["130722", "张北县", "130700"],
    ["130723", "康保县", "130700"],
    ["130724", "沽源县", "130700"],
    ["130725", "尚义县", "130700"],
    ["130726", "蔚县", "130700"],
    ["130727", "阳原县", "130700"],
    ["130728", "怀安县", "130700"],
    ["130730", "怀来县", "130700"],
    ["130731", "涿鹿县", "130700"],
    ["130732", "赤城县", "130700"],
    ["130800", "承德市", "130000"],
    ["130802", "双桥区", "130800"],
    ["130803", "双滦区", "130800"],
    ["130804", "鹰手营子矿区", "130800"],
    ["130821", "承德县", "130800"],
    ["130822", "兴隆县", "130800"],
    ["130824", "滦平县", "130800"],
    ["130825", "隆化县", "130800"],
    ["130826", "丰宁满族自治县", "130800"],
    ["130827", "宽城满族自治县", "130800"],
    ["130828", "围场满族蒙古族自治县", "130800"],
    ["130881", "平泉市", "130800"],
    ["130900", "沧州市", "130000"],
    ["130902", "新华区", "130900"],
    ["130903", "运河区", "130900"],
    ["130921", "沧县", "130900"],
    ["130922", "青县", "130900"],
    ["130923", "东光县", "130900"],
    ["130924", "海兴县", "130900"],
    ["130925", "盐山县", "130900"],
    ["130926", "肃宁县", "130900"],
    ["130927", "南皮县", "130900"],
    ["130928", "吴桥县", "130900"],
    ["130929", "献县", "130900"],
    ["130930", "孟村回族自治县", "130900"],
    ["130981", "泊头市", "130900"],
    ["130982", "任丘市", "130900"],
    ["130983", "黄骅市", "130900"],
    ["130984", "河间市", "130900"],
    ["131000", "廊坊市", "130000"],
    ["131002", "安次区", "131000"],
    ["131003", "广阳区", "131000"],
    ["131022", "固安县", "131000"],
    ["131023", "永清县", "131000"],
    ["131024", "香河县", "131000"],
    ["131025", "大城县", "131000"],
    ["131026", "文安县", "131000"],
    ["131028", "大厂回族自治县", "131000"],
    ["131081", "霸州市", "131000"],
    ["131082", "三河市", "131000"],
    ["131100", "衡水市", "130000"],
    ["131102", "桃城区", "131100"],
    ["131103", "冀州区", "131100"],
    ["131121", "枣强县", "131100"],
    ["131122", "武邑县", "131100"],
    ["131123", "武强县", "131100"],
    ["131124", "饶阳县", "131100"],
    ["131125", "安平县", "131100"],
    ["131126", "故城县", "131100"],
    ["131127", "景县", "131100"],
    ["131128", "阜城县", "131100"],
    ["131182", "深州市", "131100"],
    ["140100", "太原市", "140000"],
    ["140105", "小店区", "140100"],
    ["140106", "迎泽区", "140100"],
    ["140107", "杏花岭区", "140100"],
    ["140108", "尖草坪区", "140100"],
    ["140109", "万柏林区", "140100"],
    ["140110", "晋源区", "140100"],
    ["140121", "清徐县", "140100"],
    ["140122", "阳曲县", "140100"],
    ["140123", "娄烦县", "140100"],
    ["140181", "古交市", "140100"],
    ["140200", "大同市", "140000"],
    ["140212", "新荣区", "140200"],
    ["140213", "平城区", "140200"],
    ["140214", "云冈区", "140200"],
    ["140215", "云州区", "140200"],
    ["140221", "阳高县", "140200"],
    ["140222", "天镇县", "140200"],
    ["140223", "广灵县", "140200"],
    ["140224", "灵丘县", "140200"],
    ["140225", "浑源县", "140200"],
    ["140226", "左云县", "140200"],
    ["140300", "阳泉市", "140000"],
    ["140302", "城区", "140300"],
    ["140303", "矿区", "140300"],
    ["140311", "郊区", "140300"],
    ["140321", "平定县", "140300"],
    ["140322", "盂县", "140300"],
    ["140400", "长治市", "140000"],
    ["140403", "潞州区", "140400"],
    ["140404", "上党区", "140400"],
    ["140405", "屯留区", "140400"],
    ["140406", "潞城区", "140400"],
    ["140423", "襄垣县", "140400"],
    ["140425", "平顺县", "140400"],
    ["140426", "黎城县", "140400"],
    ["140427", "壶关县", "140400"],
    ["140428", "长子县", "140400"],
    ["140429", "武乡县", "140400"],
    ["140430", "沁县", "140400"],
    ["140431", "沁源县", "140400"],
    ["140500", "晋城市", "140000"],
    ["140502", "城区", "140500"],
    ["140521", "沁水县", "140500"],
    ["140522", "阳城县", "140500"],
    ["140524", "陵川县", "140500"],
    ["140525", "泽州县", "140500"],
    ["140581", "高平市", "140500"],
    ["140600", "朔州市", "140000"],
    ["140602", "朔城区", "140600"],
    ["140603", "平鲁区", "140600"],
    ["140621", "山阴县", "140600"],
    ["140622", "应县", "140600"],
    ["140623", "右玉县", "140600"],
    ["140681", "怀仁市", "140600"],
    ["140700", "晋中市", "140000"],
    ["140702", "榆次区", "140700"],
    ["140703", "太谷区", "140700"],
    ["140721", "榆社县", "140700"],
    ["140722", "左权县", "140700"],
    ["140723", "和顺县", "140700"],
    ["140724", "昔阳县", "140700"],
    ["140725", "寿阳县", "140700"],
    ["140727", "祁县", "140700"],
    ["140728", "平遥县", "140700"],
    ["140729", "灵石县", "140700"],
    ["140781", "介休市", "140700"],
    ["140800", "运城市", "140000"],
    ["140802", "盐湖区", "140800"],
    ["140821", "临猗县", "140800"],
    ["140822", "万荣县", "140800"],
    ["140823", "闻喜县", "140800"],
    ["140824", "稷山县", "140800"],
    ["140825", "新绛县", "140800"],
    ["140826", "绛县", "140800"],
    ["140827", "垣曲县", "140800"],
    ["140828", "夏县", "140800"],
    ["140829", "平陆县", "140800"],
    ["140830", "芮城县", "140800"],
    ["140881", "永济市", "140800"],
    ["140882", "河津市", "140800"],
    ["140900", "忻州市", "140000"],
    ["140902", "忻府区", "140900"],
    ["140921", "定襄县", "140900"],
    ["140922", "五台县", "140900"],
    ["140923", "代县", "140900"],
    ["140924", "繁峙县", "140900"],
    ["140925", "宁武县", "140900"],
    ["140926", "静乐县", "140900"],
    ["140927", "神池县", "140900"],
    ["140928", "五寨县", "140900"],
    ["140929", "岢岚县", "140900"],
    ["140930", "河曲县", "140900"],
    ["140931", "保德县", "140900"],
    ["140932", "偏关县", "140900"],
    ["140981", "原平市", "140900"],
    ["141000", "临汾市", "140000"],
    ["141002", "尧都区", "141000"],
    ["141021", "曲沃县", "141000"],
    ["141022", "翼城县", "141000"],
    ["141023", "襄汾县", "141000"],
    ["141024", "洪洞县", "141000"],
    ["141025", "古县", "141000"],
    ["141026", "安泽县", "141000"],
    ["141027", "浮山县", "141000"],
    ["141028", "吉县", "141000"],
    ["141029", "乡宁县", "141000"],
    ["141030", "大宁县", "141000"],
    ["141031", "隰县", "141000"],
    ["141032", "永和县", "141000"],
    ["141033", "蒲县", "141000"],
    ["141034", "汾西县", "141000"],
    ["141081", "侯马市", "141000"],
    ["141082", "霍州市", "141000"],
    ["141100", "吕梁市", "140000"],
    ["141102", "离石区", "141100"],
    ["141121", "文水县", "141100"],
    ["141122", "交城县", "141100"],
    ["141123", "兴县", "141100"],
    ["141124", "临县", "141100"],
    ["141125", "柳林县", "141100"],
    ["141126", "石楼县", "141100"],
    ["141127", "岚县", "141100"],
    ["141128", "方山县", "141100"],
    ["141129", "中阳县", "141100"],
    ["141130", "交口县", "141100"],
    ["141181", "孝义市", "141100"],
    ["141182", "汾阳市", "141100"],
    ["150100", "呼和浩特市", "150000"],
    ["150102", "新城区", "150100"],
    ["150103", "回民区", "150100"],
    ["150104", "玉泉区", "150100"],
    ["150105", "赛罕区", "150100"],
    ["150121", "土默特左旗", "150100"],
    ["150122", "托克托县", "150100"],
    ["150123", "和林格尔县", "150100"],
    ["150124", "清水河县", "150100"],
    ["150125", "武川县", "150100"],
    ["150200", "包头市", "150000"],
    ["150202", "东河区", "150200"],
    ["150203", "昆都仑区", "150200"],
    ["150204", "青山区", "150200"],
    ["150205", "石拐区", "150200"],
    ["150206", "白云鄂博矿区", "150200"],
    ["150207", "九原区", "150200"],
    ["150221", "土默特右旗", "150200"],
    ["150222", "固阳县", "150200"],
    ["150223", "达尔罕茂明安联合旗", "150200"],
    ["150300", "乌海市", "150000"],
    ["150302", "海勃湾区", "150300"],
    ["150303", "海南区", "150300"],
    ["150304", "乌达区", "150300"],
    ["150400", "赤峰市", "150000"],
    ["150402", "红山区", "150400"],
    ["150403", "元宝山区", "150400"],
    ["150404", "松山区", "150400"],
    ["150421", "阿鲁科尔沁旗", "150400"],
    ["150422", "巴林左旗", "150400"],
    ["150423", "巴林右旗", "150400"],
    ["150424", "林西县", "150400"],
    ["150425", "克什克腾旗", "150400"],
    ["150426", "翁牛特旗", "150400"],
    ["150428", "喀喇沁旗", "150400"],
    ["150429", "宁城县", "150400"],
    ["150430", "敖汉旗", "150400"],
    ["150500", "通辽市", "150000"],
    ["150502", "科尔沁区", "150500"],
    ["150521", "科尔沁左翼中旗", "150500"],
    ["150522", "科尔沁左翼后旗", "150500"],
    ["150523", "开鲁县", "150500"],
    ["150524", "库伦旗", "150500"],
    ["150525", "奈曼旗", "150500"],
    ["150526", "扎鲁特旗", "150500"],
    ["150581", "霍林郭勒市", "150500"],
    ["150600", "鄂尔多斯市", "150000"],
    ["150602", "东胜区", "150600"],
    ["150603", "康巴什区", "150600"],
    ["150621", "达拉特旗", "150600"],
    ["150622", "准格尔旗", "150600"],
    ["150623", "鄂托克前旗", "150600"],
    ["150624", "鄂托克旗", "150600"],
    ["150625", "杭锦旗", "150600"],
    ["150626", "乌审旗", "150600"],
    ["150627", "伊金霍洛旗", "150600"],
    ["150700", "呼伦贝尔市", "150000"],
    ["150702", "海拉尔区", "150700"],
    ["150703", "扎赉诺尔区", "150700"],
    ["150721", "阿荣旗", "150700"],
    ["150722", "莫力达瓦达斡尔族自治旗", "150700"],
    ["150723", "鄂伦春自治旗", "150700"],
    ["150724", "鄂温克族自治旗", "150700"],
    ["150725", "陈巴尔虎旗", "150700"],
    ["150726", "新巴尔虎左旗", "150700"],
    ["150727", "新巴尔虎右旗", "150700"],
    ["150781", "满洲里市", "150700"],
    ["150782", "牙克石市", "150700"],
    ["150783", "扎兰屯市", "150700"],
    ["150784", "额尔古纳市", "150700"],
    ["150785", "根河市", "150700"],
    ["150800", "巴彦淖尔市", "150000"],
    ["150802", "临河区", "150800"],
    ["150821", "五原县", "150800"],
    ["150822", "磴口县", "150800"],
    ["150823", "乌拉特前旗", "150800"],
    ["150824", "乌拉特中旗", "150800"],
    ["150825", "乌拉特后旗", "150800"],
    ["150826", "杭锦后旗", "150800"],
    ["150900", "乌兰察布市", "150000"],
    ["150902", "集宁区", "150900"],
    ["150921", "卓资县", "150900"],
    ["150922", "化德县", "150900"],
    ["150923", "商都县", "150900"],
    ["150924", "兴和县", "150900"],
    ["150925", "凉城县", "150900"],
    ["150926", "察哈尔右翼前旗", "150900"],
    ["150927", "察哈尔右翼中旗", "150900"],
    ["150928", "察哈尔右翼后旗", "150900"],
    ["150929", "四子王旗", "150900"],
    ["150981", "丰镇市", "150900"],
    ["152200", "兴安盟", "150000"],
    ["152201", "乌兰浩特市", "152200"],
    ["152202", "阿尔山市", "152200"],
    ["152221", "科尔沁右翼前旗", "152200"],
    ["152222", "科尔沁右翼中旗", "152200"],
    ["152223", "扎赉特旗", "152200"],
    ["152224", "突泉县", "152200"],
    ["152500", "锡林郭勒盟", "150000"],
    ["152501", "二连浩特市", "152500"],
    ["152502", "锡林浩特市", "152500"],
    ["152522", "阿巴嘎旗", "152500"],
    ["152523", "苏尼特左旗", "152500"],
    ["152524", "苏尼特右旗", "152500"],
    ["152525", "东乌珠穆沁旗", "152500"],
    ["152526", "西乌珠穆沁旗", "152500"],
    ["152527", "太仆寺旗", "152500"],
    ["152528", "镶黄旗", "152500"],
    ["152529", "正镶白旗", "152500"],
    ["152530", "正蓝旗", "152500"],
    ["152531", "多伦县", "152500"],
    ["152900", "阿拉善盟", "150000"],
    ["152921", "阿拉善左旗", "152900"],
    ["152922", "阿拉善右旗", "152900"],
    ["152923", "额济纳旗", "152900"],
    ["210100", "沈阳市", "210000"],
    ["210102", "和平区", "210100"],
    ["210103", "沈河区", "210100"],
    ["210104", "大东区", "210100"],
    ["210105", "皇姑区", "210100"],
    ["210106", "铁西区", "210100"],
    ["210111", "苏家屯区", "210100"],
    ["210112", "浑南区", "210100"],
    ["210113", "沈北新区", "210100"],
    ["210114", "于洪区", "210100"],
    ["210115", "辽中区", "210100"],
    ["210123", "康平县", "210100"],
    ["210124", "法库县", "210100"],
    ["210181", "新民市", "210100"],
    ["210200", "大连市", "210000"],
    ["210202", "中山区", "210200"],
    ["210203", "西岗区", "210200"],
    ["210204", "沙河口区", "210200"],
    ["210211", "甘井子区", "210200"],
    ["210212", "旅顺口区", "210200"],
    ["210213", "金州区", "210200"],
    ["210214", "普兰店区", "210200"],
    ["210224", "长海县", "210200"],
    ["210281", "瓦房店市", "210200"],
    ["210283", "庄河市", "210200"],
    ["210300", "鞍山市", "210000"],
    ["210302", "铁东区", "210300"],
    ["210303", "铁西区", "210300"],
    ["210304", "立山区", "210300"],
    ["210311", "千山区", "210300"],
    ["210321", "台安县", "210300"],
    ["210323", "岫岩满族自治县", "210300"],
    ["210381", "海城市", "210300"],
    ["210400", "抚顺市", "210000"],
    ["210402", "新抚区", "210400"],
    ["210403", "东洲区", "210400"],
    ["210404", "望花区", "210400"],
    ["210411", "顺城区", "210400"],
    ["210421", "抚顺县", "210400"],
    ["210422", "新宾满族自治县", "210400"],
    ["210423", "清原满族自治县", "210400"],
    ["210500", "本溪市", "210000"],
    ["210502", "平山区", "210500"],
    ["210503", "溪湖区", "210500"],
    ["210504", "明山区", "210500"],
    ["210505", "南芬区", "210500"],
    ["210521", "本溪满族自治县", "210500"],
    ["210522", "桓仁满族自治县", "210500"],
    ["210600", "丹东市", "210000"],
    ["210602", "元宝区", "210600"],
    ["210603", "振兴区", "210600"],
    ["210604", "振安区", "210600"],
    ["210624", "宽甸满族自治县", "210600"],
    ["210681", "东港市", "210600"],
    ["210682", "凤城市", "210600"],
    ["210700", "锦州市", "210000"],
    ["210702", "古塔区", "210700"],
    ["210703", "凌河区", "210700"],
    ["210711", "太和区", "210700"],
    ["210726", "黑山县", "210700"],
    ["210727", "义县", "210700"],
    ["210781", "凌海市", "210700"],
    ["210782", "北镇市", "210700"],
    ["210800", "营口市", "210000"],
    ["210802", "站前区", "210800"],
    ["210803", "西市区", "210800"],
    ["210804", "鲅鱼圈区", "210800"],
    ["210811", "老边区", "210800"],
    ["210881", "盖州市", "210800"],
    ["210882", "大石桥市", "210800"],
    ["210900", "阜新市", "210000"],
    ["210902", "海州区", "210900"],
    ["210903", "新邱区", "210900"],
    ["210904", "太平区", "210900"],
    ["210905", "清河门区", "210900"],
    ["210911", "细河区", "210900"],
    ["210921", "阜新蒙古族自治县", "210900"],
    ["210922", "彰武县", "210900"],
    ["211000", "辽阳市", "210000"],
    ["211002", "白塔区", "211000"],
    ["211003", "文圣区", "211000"],
    ["211004", "宏伟区", "211000"],
    ["211005", "弓长岭区", "211000"],
    ["211011", "太子河区", "211000"],
    ["211021", "辽阳县", "211000"],
    ["211081", "灯塔市", "211000"],
    ["211100", "盘锦市", "210000"],
    ["211102", "双台子区", "211100"],
    ["211103", "兴隆台区", "211100"],
    ["211104", "大洼区", "211100"],
    ["211122", "盘山县", "211100"],
    ["211200", "铁岭市", "210000"],
    ["211202", "银州区", "211200"],
    ["211204", "清河区", "211200"],
    ["211221", "铁岭县", "211200"],
    ["211223", "西丰县", "211200"],
    ["211224", "昌图县", "211200"],
    ["211281", "调兵山市", "211200"],
    ["211282", "开原市", "211200"],
    ["211300", "朝阳市", "210000"],
    ["211302", "双塔区", "211300"],
    ["211303", "龙城区", "211300"],
    ["211321", "朝阳县", "211300"],
    ["211322", "建平县", "211300"],
    ["211324", "喀喇沁左翼蒙古族自治县", "211300"],
    ["211381", "北票市", "211300"],
    ["211382", "凌源市", "211300"],
    ["211400", "葫芦岛市", "210000"],
    ["211402", "连山区", "211400"],
    ["211403", "龙港区", "211400"],
    ["211404", "南票区", "211400"],
    ["211421", "绥中县", "211400"],
    ["211422", "建昌县", "211400"],
    ["211481", "兴城市", "211400"],
    ["220100", "长春市", "220000"],
    ["220102", "南关区", "220100"],
    ["220103", "宽城区", "220100"],
    ["220104", "朝阳区", "220100"],
    ["220105", "二道区", "220100"],
    ["220106", "绿园区", "220100"],
    ["220112", "双阳区", "220100"],
    ["220113", "九台区", "220100"],
    ["220122", "农安县", "220100"],
    ["220182", "榆树市", "220100"],
    ["220183", "德惠市", "220100"],
    ["220184", "公主岭市", "220100"],
    ["220200", "吉林市", "220000"],
    ["220202", "昌邑区", "220200"],
    ["220203", "龙潭区", "220200"],
    ["220204", "船营区", "220200"],
    ["220211", "丰满区", "220200"],
    ["220221", "永吉县", "220200"],
    ["220281", "蛟河市", "220200"],
    ["220282", "桦甸市", "220200"],
    ["220283", "舒兰市", "220200"],
    ["220284", "磐石市", "220200"],
    ["220300", "四平市", "220000"],
    ["220302", "铁西区", "220300"],
    ["220303", "铁东区", "220300"],
    ["220322", "梨树县", "220300"],
    ["220323", "伊通满族自治县", "220300"],
    ["220382", "双辽市", "220300"],
    ["220400", "辽源市", "220000"],
    ["220402", "龙山区", "220400"],
    ["220403", "西安区", "220400"],
    ["220421", "东丰县", "220400"],
    ["220422", "东辽县", "220400"],
    ["220500", "通化市", "220000"],
    ["220502", "东昌区", "220500"],
    ["220503", "二道江区", "220500"],
    ["220521", "通化县", "220500"],
    ["220523", "辉南县", "220500"],
    ["220524", "柳河县", "220500"],
    ["220581", "梅河口市", "220500"],
    ["220582", "集安市", "220500"],
    ["220600", "白山市", "220000"],
    ["220602", "浑江区", "220600"],
    ["220605", "江源区", "220600"],
    ["220621", "抚松县", "220600"],
    ["220622", "靖宇县", "220600"],
    ["220623", "长白朝鲜族自治县", "220600"],
    ["220681", "临江市", "220600"],
    ["220700", "松原市", "220000"],
    ["220702", "宁江区", "220700"],
    ["220721", "前郭尔罗斯蒙古族自治县", "220700"],
    ["220722", "长岭县", "220700"],
    ["220723", "乾安县", "220700"],
    ["220781", "扶余市", "220700"],
    ["220800", "白城市", "220000"],
    ["220802", "洮北区", "220800"],
    ["220821", "镇赉县", "220800"],
    ["220822", "通榆县", "220800"],
    ["220881", "洮南市", "220800"],
    ["220882", "大安市", "220800"],
    ["222400", "延边朝鲜族自治州", "220000"],
    ["222401", "延吉市", "222400"],
    ["222402", "图们市", "222400"],
    ["222403", "敦化市", "222400"],
    ["222404", "珲春市", "222400"],
    ["222405", "龙井市", "222400"],
    ["222406", "和龙市", "222400"],
    ["222424", "汪清县", "222400"],
    ["222426", "安图县", "222400"],
    ["230100", "哈尔滨市", "230000"],
    ["230102", "道里区", "230100"],
    ["230103", "南岗区", "230100"],
    ["230104", "道外区", "230100"],
    ["230108", "平房区", "230100"],
    ["230109", "松北区", "230100"],
    ["230110", "香坊区", "230100"],
    ["230111", "呼兰区", "230100"],
    ["230112", "阿城区", "230100"],
    ["230113", "双城区", "230100"],
    ["230123", "依兰县", "230100"],
    ["230124", "方正县", "230100"],
    ["230125", "宾县", "230100"],
    ["230126", "巴彦县", "230100"],
    ["230127", "木兰县", "230100"],
    ["230128", "通河县", "230100"],
    ["230129", "延寿县", "230100"],
    ["230183", "尚志市", "230100"],
    ["230184", "五常市", "230100"],
    ["230200", "齐齐哈尔市", "230000"],
    ["230202", "龙沙区", "230200"],
    ["230203", "建华区", "230200"],
    ["230204", "铁锋区", "230200"],
    ["230205", "昂昂溪区", "230200"],
    ["230206", "富拉尔基区", "230200"],
    ["230207", "碾子山区", "230200"],
    ["230208", "梅里斯达斡尔族区", "230200"],
    ["230221", "龙江县", "230200"],
    ["230223", "依安县", "230200"],
    ["230224", "泰来县", "230200"],
    ["230225", "甘南县", "230200"],
    ["230227", "富裕县", "230200"],
    ["230229", "克山县", "230200"],
    ["230230", "克东县", "230200"],
    ["230231", "拜泉县", "230200"],
    ["230281", "讷河市", "230200"],
    ["230300", "鸡西市", "230000"],
    ["230302", "鸡冠区", "230300"],
    ["230303", "恒山区", "230300"],
    ["230304", "滴道区", "230300"],
    ["230305", "梨树区", "230300"],
    ["230306", "城子河区", "230300"],
    ["230307", "麻山区", "230300"],
    ["230321", "鸡东县", "230300"],
    ["230381", "虎林市", "230300"],
    ["230382", "密山市", "230300"],
    ["230400", "鹤岗市", "230000"],
    ["230402", "向阳区", "230400"],
    ["230403", "工农区", "230400"],
    ["230404", "南山区", "230400"],
    ["230405", "兴安区", "230400"],
    ["230406", "东山区", "230400"],
    ["230407", "兴山区", "230400"],
    ["230421", "萝北县", "230400"],
    ["230422", "绥滨县", "230400"],
    ["230500", "双鸭山市", "230000"],
    ["230502", "尖山区", "230500"],
    ["230503", "岭东区", "230500"],
    ["230505", "四方台区", "230500"],
    ["230506", "宝山区", "230500"],
    ["230521", "集贤县", "230500"],
    ["230522", "友谊县", "230500"],
    ["230523", "宝清县", "230500"],
    ["230524", "饶河县", "230500"],
    ["230600", "大庆市", "230000"],
    ["230602", "萨尔图区", "230600"],
    ["230603", "龙凤区", "230600"],
    ["230604", "让胡路区", "230600"],
    ["230605", "红岗区", "230600"],
    ["230606", "大同区", "230600"],
    ["230621", "肇州县", "230600"],
    ["230622", "肇源县", "230600"],
    ["230623", "林甸县", "230600"],
    ["230624", "杜尔伯特蒙古族自治县", "230600"],
    ["230700", "伊春市", "230000"],
    ["230717", "伊美区", "230700"],
    ["230718", "乌翠区", "230700"],
    ["230719", "友好区", "230700"],
    ["230722", "嘉荫县", "230700"],
    ["230723", "汤旺县", "230700"],
    ["230724", "丰林县", "230700"],
    ["230725", "大箐山县", "230700"],
    ["230726", "南岔县", "230700"],
    ["230751", "金林区", "230700"],
    ["230781", "铁力市", "230700"],
    ["230800", "佳木斯市", "230000"],
    ["230803", "向阳区", "230800"],
    ["230804", "前进区", "230800"],
    ["230805", "东风区", "230800"],
    ["230811", "郊区", "230800"],
    ["230822", "桦南县", "230800"],
    ["230826", "桦川县", "230800"],
    ["230828", "汤原县", "230800"],
    ["230881", "同江市", "230800"],
    ["230882", "富锦市", "230800"],
    ["230883", "抚远市", "230800"],
    ["230900", "七台河市", "230000"],
    ["230902", "新兴区", "230900"],
    ["230903", "桃山区", "230900"],
    ["230904", "茄子河区", "230900"],
    ["230921", "勃利县", "230900"],
    ["231000", "牡丹江市", "230000"],
    ["231002", "东安区", "231000"],
    ["231003", "阳明区", "231000"],
    ["231004", "爱民区", "231000"],
    ["231005", "西安区", "231000"],
    ["231025", "林口县", "231000"],
    ["231081", "绥芬河市", "231000"],
    ["231083", "海林市", "231000"],
    ["231084", "宁安市", "231000"],
    ["231085", "穆棱市", "231000"],
    ["231086", "东宁市", "231000"],
    ["231100", "黑河市", "230000"],
    ["231102", "爱辉区", "231100"],
    ["231123", "逊克县", "231100"],
    ["231124", "孙吴县", "231100"],
    ["231181", "北安市", "231100"],
    ["231182", "五大连池市", "231100"],
    ["231183", "嫩江市", "231100"],
    ["231200", "绥化市", "230000"],
    ["231202", "北林区", "231200"],
    ["231221", "望奎县", "231200"],
    ["231222", "兰西县", "231200"],
    ["231223", "青冈县", "231200"],
    ["231224", "庆安县", "231200"],
    ["231225", "明水县", "231200"],
    ["231226", "绥棱县", "231200"],
    ["231281", "安达市", "231200"],
    ["231282", "肇东市", "231200"],
    ["231283", "海伦市", "231200"],
    ["232700", "大兴安岭地区", "230000"],
    ["232701", "漠河市", "232700"],
    ["232721", "呼玛县", "232700"],
    ["232722", "塔河县", "232700"],
    ["232761", "加格达奇区", "232700"],
    ["232762", "松岭区", "232700"],
    ["232763", "新林区", "232700"],
    ["232764", "呼中区", "232700"],
    ["310100", "上海市", "310000"],
    ["310101", "黄浦区", "310100"],
    ["310104", "徐汇区", "310100"],
    ["310105", "长宁区", "310100"],
    ["310106", "静安区", "310100"],
    ["310107", "普陀区", "310100"],
    ["310109", "虹口区", "310100"],
    ["310110", "杨浦区", "310100"],
    ["310112", "闵行区", "310100"],
    ["310113", "宝山区", "310100"],
    ["310114", "嘉定区", "310100"],
    ["310115", "浦东新区", "310100"],
    ["310116", "金山区", "310100"],
    ["310117", "松江区", "310100"],
    ["310118", "青浦区", "310100"],
    ["310120", "奉贤区", "310100"],
    ["310151", "崇明区", "310100"],
    ["320100", "南京市", "320000"],
    ["320102", "玄武区", "320100"],
    ["320104", "秦淮区", "320100"],
    ["320105", "建邺区", "320100"],
    ["320106", "鼓楼区", "320100"],
    ["320111", "浦口区", "320100"],
    ["320113", "栖霞区", "320100"],
    ["320114", "雨花台区", "320100"],
    ["320115", "江宁区", "320100"],
    ["320116", "六合区", "320100"],
    ["320117", "溧水区", "320100"],
    ["320118", "高淳区", "320100"],
    ["320200", "无锡市", "320000"],
    ["320205", "锡山区", "320200"],
    ["320206", "惠山区", "320200"],
    ["320211", "滨湖区", "320200"],
    ["320213", "梁溪区", "320200"],
    ["320214", "新吴区", "320200"],
    ["320281", "江阴市", "320200"],
    ["320282", "宜兴市", "320200"],
    ["320300", "徐州市", "320000"],
    ["320302", "鼓楼区", "320300"],
    ["320303", "云龙区", "320300"],
    ["320305", "贾汪区", "320300"],
    ["320311", "泉山区", "320300"],
    ["320312", "铜山区", "320300"],
    ["320321", "丰县", "320300"],
    ["320322", "沛县", "320300"],
    ["320324", "睢宁县", "320300"],
    ["320381", "新沂市", "320300"],
    ["320382", "邳州市", "320300"],
    ["320400", "常州市", "320000"],
    ["320402", "天宁区", "320400"],
    ["320404", "钟楼区", "320400"],
    ["320411", "新北区", "320400"],
    ["320412", "武进区", "320400"],
    ["320413", "金坛区", "320400"],
    ["320481", "溧阳市", "320400"],
    ["320500", "苏州市", "320000"],
    ["320505", "虎丘区", "320500"],
    ["320506", "吴中区", "320500"],
    ["320507", "相城区", "320500"],
    ["320508", "姑苏区", "320500"],
    ["320509", "吴江区", "320500"],
    ["320581", "常熟市", "320500"],
    ["320582", "张家港市", "320500"],
    ["320583", "昆山市", "320500"],
    ["320585", "太仓市", "320500"],
    ["320600", "南通市", "320000"],
    ["320602", "崇川区", "320600"],
    ["320612", "通州区", "320600"],
    ["320623", "如东县", "320600"],
    ["320681", "启东市", "320600"],
    ["320682", "如皋市", "320600"],
    ["320684", "海门市", "320600"],
    ["320685", "海安市", "320600"],
    ["320700", "连云港市", "320000"],
    ["320703", "连云区", "320700"],
    ["320706", "海州区", "320700"],
    ["320707", "赣榆区", "320700"],
    ["320722", "东海县", "320700"],
    ["320723", "灌云县", "320700"],
    ["320724", "灌南县", "320700"],
    ["320800", "淮安市", "320000"],
    ["320803", "淮安区", "320800"],
    ["320804", "淮阴区", "320800"],
    ["320812", "清江浦区", "320800"],
    ["320813", "洪泽区", "320800"],
    ["320826", "涟水县", "320800"],
    ["320830", "盱眙县", "320800"],
    ["320831", "金湖县", "320800"],
    ["320900", "盐城市", "320000"],
    ["320902", "亭湖区", "320900"],
    ["320903", "盐都区", "320900"],
    ["320904", "大丰区", "320900"],
    ["320921", "响水县", "320900"],
    ["320922", "滨海县", "320900"],
    ["320923", "阜宁县", "320900"],
    ["320924", "射阳县", "320900"],
    ["320925", "建湖县", "320900"],
    ["320981", "东台市", "320900"],
    ["321000", "扬州市", "320000"],
    ["321002", "广陵区", "321000"],
    ["321003", "邗江区", "321000"],
    ["321012", "江都区", "321000"],
    ["321023", "宝应县", "321000"],
    ["321081", "仪征市", "321000"],
    ["321084", "高邮市", "321000"],
    ["321100", "镇江市", "320000"],
    ["321102", "京口区", "321100"],
    ["321111", "润州区", "321100"],
    ["321112", "丹徒区", "321100"],
    ["321181", "丹阳市", "321100"],
    ["321182", "扬中市", "321100"],
    ["321183", "句容市", "321100"],
    ["321200", "泰州市", "320000"],
    ["321202", "海陵区", "321200"],
    ["321203", "高港区", "321200"],
    ["321204", "姜堰区", "321200"],
    ["321281", "兴化市", "321200"],
    ["321282", "靖江市", "321200"],
    ["321283", "泰兴市", "321200"],
    ["321300", "宿迁市", "320000"],
    ["321302", "宿城区", "321300"],
    ["321311", "宿豫区", "321300"],
    ["321322", "沭阳县", "321300"],
    ["321323", "泗阳县", "321300"],
    ["321324", "泗洪县", "321300"],
    ["330100", "杭州市", "330000"],
    ["330102", "上城区", "330100"],
    ["330103", "下城区", "330100"],
    ["330104", "江干区", "330100"],
    ["330105", "拱墅区", "330100"],
    ["330106", "西湖区", "330100"],
    ["330108", "滨江区", "330100"],
    ["330109", "萧山区", "330100"],
    ["330110", "余杭区", "330100"],
    ["330111", "富阳区", "330100"],
    ["330112", "临安区", "330100"],
    ["330122", "桐庐县", "330100"],
    ["330127", "淳安县", "330100"],
    ["330182", "建德市", "330100"],
    ["330200", "宁波市", "330000"],
    ["330203", "海曙区", "330200"],
    ["330205", "江北区", "330200"],
    ["330206", "北仑区", "330200"],
    ["330211", "镇海区", "330200"],
    ["330212", "鄞州区", "330200"],
    ["330213", "奉化区", "330200"],
    ["330225", "象山县", "330200"],
    ["330226", "宁海县", "330200"],
    ["330281", "余姚市", "330200"],
    ["330282", "慈溪市", "330200"],
    ["330300", "温州市", "330000"],
    ["330302", "鹿城区", "330300"],
    ["330303", "龙湾区", "330300"],
    ["330304", "瓯海区", "330300"],
    ["330305", "洞头区", "330300"],
    ["330324", "永嘉县", "330300"],
    ["330326", "平阳县", "330300"],
    ["330327", "苍南县", "330300"],
    ["330328", "文成县", "330300"],
    ["330329", "泰顺县", "330300"],
    ["330381", "瑞安市", "330300"],
    ["330382", "乐清市", "330300"],
    ["330383", "龙港市", "330300"],
    ["330400", "嘉兴市", "330000"],
    ["330402", "南湖区", "330400"],
    ["330411", "秀洲区", "330400"],
    ["330421", "嘉善县", "330400"],
    ["330424", "海盐县", "330400"],
    ["330481", "海宁市", "330400"],
    ["330482", "平湖市", "330400"],
    ["330483", "桐乡市", "330400"],
    ["330500", "湖州市", "330000"],
    ["330502", "吴兴区", "330500"],
    ["330503", "南浔区", "330500"],
    ["330521", "德清县", "330500"],
    ["330522", "长兴县", "330500"],
    ["330523", "安吉县", "330500"],
    ["330600", "绍兴市", "330000"],
    ["330602", "越城区", "330600"],
    ["330603", "柯桥区", "330600"],
    ["330604", "上虞区", "330600"],
    ["330624", "新昌县", "330600"],
    ["330681", "诸暨市", "330600"],
    ["330683", "嵊州市", "330600"],
    ["330700", "金华市", "330000"],
    ["330702", "婺城区", "330700"],
    ["330703", "金东区", "330700"],
    ["330723", "武义县", "330700"],
    ["330726", "浦江县", "330700"],
    ["330727", "磐安县", "330700"],
    ["330781", "兰溪市", "330700"],
    ["330782", "义乌市", "330700"],
    ["330783", "东阳市", "330700"],
    ["330784", "永康市", "330700"],
    ["330800", "衢州市", "330000"],
    ["330802", "柯城区", "330800"],
    ["330803", "衢江区", "330800"],
    ["330822", "常山县", "330800"],
    ["330824", "开化县", "330800"],
    ["330825", "龙游县", "330800"],
    ["330881", "江山市", "330800"],
    ["330900", "舟山市", "330000"],
    ["330902", "定海区", "330900"],
    ["330903", "普陀区", "330900"],
    ["330921", "岱山县", "330900"],
    ["330922", "嵊泗县", "330900"],
    ["331000", "台州市", "330000"],
    ["331002", "椒江区", "331000"],
    ["331003", "黄岩区", "331000"],
    ["331004", "路桥区", "331000"],
    ["331022", "三门县", "331000"],
    ["331023", "天台县", "331000"],
    ["331024", "仙居县", "331000"],
    ["331081", "温岭市", "331000"],
    ["331082", "临海市", "331000"],
    ["331083", "玉环市", "331000"],
    ["331100", "丽水市", "330000"],
    ["331102", "莲都区", "331100"],
    ["331121", "青田县", "331100"],
    ["331122", "缙云县", "331100"],
    ["331123", "遂昌县", "331100"],
    ["331124", "松阳县", "331100"],
    ["331125", "云和县", "331100"],
    ["331126", "庆元县", "331100"],
    ["331127", "景宁畲族自治县", "331100"],
    ["331181", "龙泉市", "331100"],
    ["340100", "合肥市", "340000"],
    ["340102", "瑶海区", "340100"],
    ["340103", "庐阳区", "340100"],
    ["340104", "蜀山区", "340100"],
    ["340111", "包河区", "340100"],
    ["340121", "长丰县", "340100"],
    ["340122", "肥东县", "340100"],
    ["340123", "肥西县", "340100"],
    ["340124", "庐江县", "340100"],
    ["340181", "巢湖市", "340100"],
    ["340200", "芜湖市", "340000"],
    ["340202", "镜湖区", "340200"],
    ["340203", "弋江区", "340200"],
    ["340207", "鸠江区", "340200"],
    ["340221", "芜湖县", "340200"],
    ["340222", "繁昌县", "340200"],
    ["340223", "南陵县", "340200"],
    ["340281", "无为市", "340200"],
    ["340300", "蚌埠市", "340000"],
    ["340302", "龙子湖区", "340300"],
    ["340303", "蚌山区", "340300"],
    ["340304", "禹会区", "340300"],
    ["340311", "淮上区", "340300"],
    ["340321", "怀远县", "340300"],
    ["340322", "五河县", "340300"],
    ["340323", "固镇县", "340300"],
    ["340400", "淮南市", "340000"],
    ["340402", "大通区", "340400"],
    ["340403", "田家庵区", "340400"],
    ["340404", "谢家集区", "340400"],
    ["340405", "八公山区", "340400"],
    ["340406", "潘集区", "340400"],
    ["340421", "凤台县", "340400"],
    ["340422", "寿县", "340400"],
    ["340500", "马鞍山市", "340000"],
    ["340503", "花山区", "340500"],
    ["340504", "雨山区", "340500"],
    ["340506", "博望区", "340500"],
    ["340521", "当涂县", "340500"],
    ["340522", "含山县", "340500"],
    ["340523", "和县", "340500"],
    ["340600", "淮北市", "340000"],
    ["340602", "杜集区", "340600"],
    ["340603", "相山区", "340600"],
    ["340604", "烈山区", "340600"],
    ["340621", "濉溪县", "340600"],
    ["340700", "铜陵市", "340000"],
    ["340705", "铜官区", "340700"],
    ["340706", "义安区", "340700"],
    ["340711", "郊区", "340700"],
    ["340722", "枞阳县", "340700"],
    ["340800", "安庆市", "340000"],
    ["340802", "迎江区", "340800"],
    ["340803", "大观区", "340800"],
    ["340811", "宜秀区", "340800"],
    ["340822", "怀宁县", "340800"],
    ["340825", "太湖县", "340800"],
    ["340826", "宿松县", "340800"],
    ["340827", "望江县", "340800"],
    ["340828", "岳西县", "340800"],
    ["340881", "桐城市", "340800"],
    ["340882", "潜山市", "340800"],
    ["341000", "黄山市", "340000"],
    ["341002", "屯溪区", "341000"],
    ["341003", "黄山区", "341000"],
    ["341004", "徽州区", "341000"],
    ["341021", "歙县", "341000"],
    ["341022", "休宁县", "341000"],
    ["341023", "黟县", "341000"],
    ["341024", "祁门县", "341000"],
    ["341100", "滁州市", "340000"],
    ["341102", "琅琊区", "341100"],
    ["341103", "南谯区", "341100"],
    ["341122", "来安县", "341100"],
    ["341124", "全椒县", "341100"],
    ["341125", "定远县", "341100"],
    ["341126", "凤阳县", "341100"],
    ["341181", "天长市", "341100"],
    ["341182", "明光市", "341100"],
    ["341200", "阜阳市", "340000"],
    ["341202", "颍州区", "341200"],
    ["341203", "颍东区", "341200"],
    ["341204", "颍泉区", "341200"],
    ["341221", "临泉县", "341200"],
    ["341222", "太和县", "341200"],
    ["341225", "阜南县", "341200"],
    ["341226", "颍上县", "341200"],
    ["341282", "界首市", "341200"],
    ["341300", "宿州市", "340000"],
    ["341302", "埇桥区", "341300"],
    ["341321", "砀山县", "341300"],
    ["341322", "萧县", "341300"],
    ["341323", "灵璧县", "341300"],
    ["341324", "泗县", "341300"],
    ["341500", "六安市", "340000"],
    ["341502", "金安区", "341500"],
    ["341503", "裕安区", "341500"],
    ["341504", "叶集区", "341500"],
    ["341522", "霍邱县", "341500"],
    ["341523", "舒城县", "341500"],
    ["341524", "金寨县", "341500"],
    ["341525", "霍山县", "341500"],
    ["341600", "亳州市", "340000"],
    ["341602", "谯城区", "341600"],
    ["341621", "涡阳县", "341600"],
    ["341622", "蒙城县", "341600"],
    ["341623", "利辛县", "341600"],
    ["341700", "池州市", "340000"],
    ["341702", "贵池区", "341700"],
    ["341721", "东至县", "341700"],
    ["341722", "石台县", "341700"],
    ["341723", "青阳县", "341700"],
    ["341800", "宣城市", "340000"],
    ["341802", "宣州区", "341800"],
    ["341821", "郎溪县", "341800"],
    ["341823", "泾县", "341800"],
    ["341824", "绩溪县", "341800"],
    ["341825", "旌德县", "341800"],
    ["341881", "宁国市", "341800"],
    ["341882", "广德市", "341800"],
    ["350100", "福州市", "350000"],
    ["350102", "鼓楼区", "350100"],
    ["350103", "台江区", "350100"],
    ["350104", "仓山区", "350100"],
    ["350105", "马尾区", "350100"],
    ["350111", "晋安区", "350100"],
    ["350112", "长乐区", "350100"],
    ["350121", "闽侯县", "350100"],
    ["350122", "连江县", "350100"],
    ["350123", "罗源县", "350100"],
    ["350124", "闽清县", "350100"],
    ["350125", "永泰县", "350100"],
    ["350128", "平潭县", "350100"],
    ["350181", "福清市", "350100"],
    ["350200", "厦门市", "350000"],
    ["350203", "思明区", "350200"],
    ["350205", "海沧区", "350200"],
    ["350206", "湖里区", "350200"],
    ["350211", "集美区", "350200"],
    ["350212", "同安区", "350200"],
    ["350213", "翔安区", "350200"],
    ["350300", "莆田市", "350000"],
    ["350302", "城厢区", "350300"],
    ["350303", "涵江区", "350300"],
    ["350304", "荔城区", "350300"],
    ["350305", "秀屿区", "350300"],
    ["350322", "仙游县", "350300"],
    ["350400", "三明市", "350000"],
    ["350402", "梅列区", "350400"],
    ["350403", "三元区", "350400"],
    ["350421", "明溪县", "350400"],
    ["350423", "清流县", "350400"],
    ["350424", "宁化县", "350400"],
    ["350425", "大田县", "350400"],
    ["350426", "尤溪县", "350400"],
    ["350427", "沙县", "350400"],
    ["350428", "将乐县", "350400"],
    ["350429", "泰宁县", "350400"],
    ["350430", "建宁县", "350400"],
    ["350481", "永安市", "350400"],
    ["350500", "泉州市", "350000"],
    ["350502", "鲤城区", "350500"],
    ["350503", "丰泽区", "350500"],
    ["350504", "洛江区", "350500"],
    ["350505", "泉港区", "350500"],
    ["350521", "惠安县", "350500"],
    ["350524", "安溪县", "350500"],
    ["350525", "永春县", "350500"],
    ["350526", "德化县", "350500"],
    ["350527", "金门县", "350500"],
    ["350581", "石狮市", "350500"],
    ["350582", "晋江市", "350500"],
    ["350583", "南安市", "350500"],
    ["350600", "漳州市", "350000"],
    ["350602", "芗城区", "350600"],
    ["350603", "龙文区", "350600"],
    ["350622", "云霄县", "350600"],
    ["350623", "漳浦县", "350600"],
    ["350624", "诏安县", "350600"],
    ["350625", "长泰县", "350600"],
    ["350626", "东山县", "350600"],
    ["350627", "南靖县", "350600"],
    ["350628", "平和县", "350600"],
    ["350629", "华安县", "350600"],
    ["350681", "龙海市", "350600"],
    ["350700", "南平市", "350000"],
    ["350702", "延平区", "350700"],
    ["350703", "建阳区", "350700"],
    ["350721", "顺昌县", "350700"],
    ["350722", "浦城县", "350700"],
    ["350723", "光泽县", "350700"],
    ["350724", "松溪县", "350700"],
    ["350725", "政和县", "350700"],
    ["350781", "邵武市", "350700"],
    ["350782", "武夷山市", "350700"],
    ["350783", "建瓯市", "350700"],
    ["350800", "龙岩市", "350000"],
    ["350802", "新罗区", "350800"],
    ["350803", "永定区", "350800"],
    ["350821", "长汀县", "350800"],
    ["350823", "上杭县", "350800"],
    ["350824", "武平县", "350800"],
    ["350825", "连城县", "350800"],
    ["350881", "漳平市", "350800"],
    ["350900", "宁德市", "350000"],
    ["350902", "蕉城区", "350900"],
    ["350903", "东侨开发区", "350900"],
    ["350921", "霞浦县", "350900"],
    ["350922", "古田县", "350900"],
    ["350923", "屏南县", "350900"],
    ["350924", "寿宁县", "350900"],
    ["350925", "周宁县", "350900"],
    ["350926", "柘荣县", "350900"],
    ["350981", "福安市", "350900"],
    ["350982", "福鼎市", "350900"],
    ["351000", "平潭综合实验区", "350000"],
    ["351001", "潭城", "351000"],
    ["351002", "苏澳", "351000"],
    ["351003", "流水", "351000"],
    ["351004", "澳前", "351000"],
    ["351005", "北厝", "351000"],
    ["351006", "平原", "351000"],
    ["351007", "敖东", "351000"],
    ["360100", "南昌市", "360000"],
    ["360102", "东湖区", "360100"],
    ["360103", "西湖区", "360100"],
    ["360104", "青云谱区", "360100"],
    ["360111", "青山湖区", "360100"],
    ["360112", "新建区", "360100"],
    ["360113", "红谷滩区", "360100"],
    ["360121", "南昌县", "360100"],
    ["360123", "安义县", "360100"],
    ["360124", "进贤县", "360100"],
    ["360200", "景德镇市", "360000"],
    ["360202", "昌江区", "360200"],
    ["360203", "珠山区", "360200"],
    ["360222", "浮梁县", "360200"],
    ["360281", "乐平市", "360200"],
    ["360300", "萍乡市", "360000"],
    ["360302", "安源区", "360300"],
    ["360313", "湘东区", "360300"],
    ["360321", "莲花县", "360300"],
    ["360322", "上栗县", "360300"],
    ["360323", "芦溪县", "360300"],
    ["360400", "九江市", "360000"],
    ["360402", "濂溪区", "360400"],
    ["360403", "浔阳区", "360400"],
    ["360404", "柴桑区", "360400"],
    ["360423", "武宁县", "360400"],
    ["360424", "修水县", "360400"],
    ["360425", "永修县", "360400"],
    ["360426", "德安县", "360400"],
    ["360428", "都昌县", "360400"],
    ["360429", "湖口县", "360400"],
    ["360430", "彭泽县", "360400"],
    ["360481", "瑞昌市", "360400"],
    ["360482", "共青城市", "360400"],
    ["360483", "庐山市", "360400"],
    ["360500", "新余市", "360000"],
    ["360502", "渝水区", "360500"],
    ["360521", "分宜县", "360500"],
    ["360600", "鹰潭市", "360000"],
    ["360602", "月湖区", "360600"],
    ["360603", "余江区", "360600"],
    ["360681", "贵溪市", "360600"],
    ["360700", "赣州市", "360000"],
    ["360702", "章贡区", "360700"],
    ["360703", "南康区", "360700"],
    ["360704", "赣县区", "360700"],
    ["360722", "信丰县", "360700"],
    ["360723", "大余县", "360700"],
    ["360724", "上犹县", "360700"],
    ["360725", "崇义县", "360700"],
    ["360726", "安远县", "360700"],
    ["360727", "龙南县", "360700"],
    ["360728", "定南县", "360700"],
    ["360729", "全南县", "360700"],
    ["360730", "宁都县", "360700"],
    ["360731", "于都县", "360700"],
    ["360732", "兴国县", "360700"],
    ["360733", "会昌县", "360700"],
    ["360734", "寻乌县", "360700"],
    ["360735", "石城县", "360700"],
    ["360781", "瑞金市", "360700"],
    ["360800", "吉安市", "360000"],
    ["360802", "吉州区", "360800"],
    ["360803", "青原区", "360800"],
    ["360821", "吉安县", "360800"],
    ["360822", "吉水县", "360800"],
    ["360823", "峡江县", "360800"],
    ["360824", "新干县", "360800"],
    ["360825", "永丰县", "360800"],
    ["360826", "泰和县", "360800"],
    ["360827", "遂川县", "360800"],
    ["360828", "万安县", "360800"],
    ["360829", "安福县", "360800"],
    ["360830", "永新县", "360800"],
    ["360881", "井冈山市", "360800"],
    ["360900", "宜春市", "360000"],
    ["360902", "袁州区", "360900"],
    ["360921", "奉新县", "360900"],
    ["360922", "万载县", "360900"],
    ["360923", "上高县", "360900"],
    ["360924", "宜丰县", "360900"],
    ["360925", "靖安县", "360900"],
    ["360926", "铜鼓县", "360900"],
    ["360981", "丰城市", "360900"],
    ["360982", "樟树市", "360900"],
    ["360983", "高安市", "360900"],
    ["361000", "抚州市", "360000"],
    ["361002", "临川区", "361000"],
    ["361003", "东乡区", "361000"],
    ["361021", "南城县", "361000"],
    ["361022", "黎川县", "361000"],
    ["361023", "南丰县", "361000"],
    ["361024", "崇仁县", "361000"],
    ["361025", "乐安县", "361000"],
    ["361026", "宜黄县", "361000"],
    ["361027", "金溪县", "361000"],
    ["361028", "资溪县", "361000"],
    ["361030", "广昌县", "361000"],
    ["361100", "上饶市", "360000"],
    ["361102", "信州区", "361100"],
    ["361103", "广丰区", "361100"],
    ["361104", "广信区", "361100"],
    ["361123", "玉山县", "361100"],
    ["361124", "铅山县", "361100"],
    ["361125", "横峰县", "361100"],
    ["361126", "弋阳县", "361100"],
    ["361127", "余干县", "361100"],
    ["361128", "鄱阳县", "361100"],
    ["361129", "万年县", "361100"],
    ["361130", "婺源县", "361100"],
    ["361181", "德兴市", "361100"],
    ["370100", "济南市", "370000"],
    ["370102", "历下区", "370100"],
    ["370103", "市中区", "370100"],
    ["370104", "槐荫区", "370100"],
    ["370105", "天桥区", "370100"],
    ["370112", "历城区", "370100"],
    ["370113", "长清区", "370100"],
    ["370114", "章丘区", "370100"],
    ["370115", "济阳区", "370100"],
    ["370116", "莱芜区", "370100"],
    ["370117", "钢城区", "370100"],
    ["370124", "平阴县", "370100"],
    ["370126", "商河县", "370100"],
    ["370200", "青岛市", "370000"],
    ["370202", "市南区", "370200"],
    ["370203", "市北区", "370200"],
    ["370211", "黄岛区", "370200"],
    ["370212", "崂山区", "370200"],
    ["370213", "李沧区", "370200"],
    ["370214", "城阳区", "370200"],
    ["370215", "即墨区", "370200"],
    ["370281", "胶州市", "370200"],
    ["370283", "平度市", "370200"],
    ["370285", "莱西市", "370200"],
    ["370300", "淄博市", "370000"],
    ["370302", "淄川区", "370300"],
    ["370303", "张店区", "370300"],
    ["370304", "博山区", "370300"],
    ["370305", "临淄区", "370300"],
    ["370306", "周村区", "370300"],
    ["370321", "桓台县", "370300"],
    ["370322", "高青县", "370300"],
    ["370323", "沂源县", "370300"],
    ["370400", "枣庄市", "370000"],
    ["370402", "市中区", "370400"],
    ["370403", "薛城区", "370400"],
    ["370404", "峄城区", "370400"],
    ["370405", "台儿庄区", "370400"],
    ["370406", "山亭区", "370400"],
    ["370481", "滕州市", "370400"],
    ["370500", "东营市", "370000"],
    ["370502", "东营区", "370500"],
    ["370503", "河口区", "370500"],
    ["370505", "垦利区", "370500"],
    ["370522", "利津县", "370500"],
    ["370523", "广饶县", "370500"],
    ["370600", "烟台市", "370000"],
    ["370602", "芝罘区", "370600"],
    ["370611", "福山区", "370600"],
    ["370612", "牟平区", "370600"],
    ["370613", "莱山区", "370600"],
    ["370681", "龙口市", "370600"],
    ["370682", "莱阳市", "370600"],
    ["370683", "莱州市", "370600"],
    ["370684", "蓬莱区", "370600"],
    ["370685", "招远市", "370600"],
    ["370686", "栖霞市", "370600"],
    ["370687", "海阳市", "370600"],
    ["370700", "潍坊市", "370000"],
    ["370702", "潍城区", "370700"],
    ["370703", "寒亭区", "370700"],
    ["370704", "坊子区", "370700"],
    ["370705", "奎文区", "370700"],
    ["370724", "临朐县", "370700"],
    ["370725", "昌乐县", "370700"],
    ["370781", "青州市", "370700"],
    ["370782", "诸城市", "370700"],
    ["370783", "寿光市", "370700"],
    ["370784", "安丘市", "370700"],
    ["370785", "高密市", "370700"],
    ["370786", "昌邑市", "370700"],
    ["370800", "济宁市", "370000"],
    ["370811", "任城区", "370800"],
    ["370812", "兖州区", "370800"],
    ["370826", "微山县", "370800"],
    ["370827", "鱼台县", "370800"],
    ["370828", "金乡县", "370800"],
    ["370829", "嘉祥县", "370800"],
    ["370830", "汶上县", "370800"],
    ["370831", "泗水县", "370800"],
    ["370832", "梁山县", "370800"],
    ["370881", "曲阜市", "370800"],
    ["370883", "邹城市", "370800"],
    ["370900", "泰安市", "370000"],
    ["370902", "泰山区", "370900"],
    ["370911", "岱岳区", "370900"],
    ["370921", "宁阳县", "370900"],
    ["370923", "东平县", "370900"],
    ["370982", "新泰市", "370900"],
    ["370983", "肥城市", "370900"],
    ["371000", "威海市", "370000"],
    ["371002", "环翠区", "371000"],
    ["371003", "文登区", "371000"],
    ["371082", "荣成市", "371000"],
    ["371083", "乳山市", "371000"],
    ["371100", "日照市", "370000"],
    ["371102", "东港区", "371100"],
    ["371103", "岚山区", "371100"],
    ["371121", "五莲县", "371100"],
    ["371122", "莒县", "371100"],
    ["371300", "临沂市", "370000"],
    ["371302", "兰山区", "371300"],
    ["371311", "罗庄区", "371300"],
    ["371312", "河东区", "371300"],
    ["371321", "沂南县", "371300"],
    ["371322", "郯城县", "371300"],
    ["371323", "沂水县", "371300"],
    ["371324", "兰陵县", "371300"],
    ["371325", "费县", "371300"],
    ["371326", "平邑县", "371300"],
    ["371327", "莒南县", "371300"],
    ["371328", "蒙阴县", "371300"],
    ["371329", "临沭县", "371300"],
    ["371400", "德州市", "370000"],
    ["371402", "德城区", "371400"],
    ["371403", "陵城区", "371400"],
    ["371422", "宁津县", "371400"],
    ["371423", "庆云县", "371400"],
    ["371424", "临邑县", "371400"],
    ["371425", "齐河县", "371400"],
    ["371426", "平原县", "371400"],
    ["371427", "夏津县", "371400"],
    ["371428", "武城县", "371400"],
    ["371481", "乐陵市", "371400"],
    ["371482", "禹城市", "371400"],
    ["371500", "聊城市", "370000"],
    ["371502", "东昌府区", "371500"],
    ["371503", "茌平区", "371500"],
    ["371521", "阳谷县", "371500"],
    ["371522", "莘县", "371500"],
    ["371524", "东阿县", "371500"],
    ["371525", "冠县", "371500"],
    ["371526", "高唐县", "371500"],
    ["371581", "临清市", "371500"],
    ["371600", "滨州市", "370000"],
    ["371602", "滨城区", "371600"],
    ["371603", "沾化区", "371600"],
    ["371621", "惠民县", "371600"],
    ["371622", "阳信县", "371600"],
    ["371623", "无棣县", "371600"],
    ["371625", "博兴县", "371600"],
    ["371681", "邹平市", "371600"],
    ["371682", "北海新区", "371600"],
    ["371700", "菏泽市", "370000"],
    ["371702", "牡丹区", "371700"],
    ["371703", "定陶区", "371700"],
    ["371721", "曹县", "371700"],
    ["371722", "单县", "371700"],
    ["371723", "成武县", "371700"],
    ["371724", "巨野县", "371700"],
    ["371725", "郓城县", "371700"],
    ["371726", "鄄城县", "371700"],
    ["371728", "东明县", "371700"],
    ["410100", "郑州市", "410000"],
    ["410102", "中原区", "410100"],
    ["410103", "二七区", "410100"],
    ["410104", "管城回族区", "410100"],
    ["410105", "金水区", "410100"],
    ["410106", "上街区", "410100"],
    ["410108", "惠济区", "410100"],
    ["410122", "中牟县", "410100"],
    ["410181", "巩义市", "410100"],
    ["410182", "荥阳市", "410100"],
    ["410183", "新密市", "410100"],
    ["410184", "新郑市", "410100"],
    ["410185", "登封市", "410100"],
    ["410186", "郑汴新区", "410100"],
    ["410200", "开封市", "410000"],
    ["410202", "龙亭区", "410200"],
    ["410203", "顺河回族区", "410200"],
    ["410204", "鼓楼区", "410200"],
    ["410205", "禹王台区", "410200"],
    ["410212", "祥符区", "410200"],
    ["410221", "杞县", "410200"],
    ["410222", "通许县", "410200"],
    ["410223", "尉氏县", "410200"],
    ["410225", "兰考县", "410200"],
    ["410300", "洛阳市", "410000"],
    ["410302", "老城区", "410300"],
    ["410303", "西工区", "410300"],
    ["410304", "瀍河回族区", "410300"],
    ["410305", "涧西区", "410300"],
    ["410306", "吉利区", "410300"],
    ["410311", "洛龙区", "410300"],
    ["410322", "孟津县", "410300"],
    ["410323", "新安县", "410300"],
    ["410324", "栾川县", "410300"],
    ["410325", "嵩县", "410300"],
    ["410326", "汝阳县", "410300"],
    ["410327", "宜阳县", "410300"],
    ["410328", "洛宁县", "410300"],
    ["410329", "伊川县", "410300"],
    ["410381", "偃师市", "410300"],
    ["410400", "平顶山市", "410000"],
    ["410402", "新华区", "410400"],
    ["410403", "卫东区", "410400"],
    ["410404", "石龙区", "410400"],
    ["410411", "湛河区", "410400"],
    ["410421", "宝丰县", "410400"],
    ["410422", "叶县", "410400"],
    ["410423", "鲁山县", "410400"],
    ["410425", "郏县", "410400"],
    ["410481", "舞钢市", "410400"],
    ["410482", "汝州市", "410400"],
    ["410500", "安阳市", "410000"],
    ["410502", "文峰区", "410500"],
    ["410503", "北关区", "410500"],
    ["410505", "殷都区", "410500"],
    ["410506", "龙安区", "410500"],
    ["410522", "安阳县", "410500"],
    ["410523", "汤阴县", "410500"],
    ["410526", "滑县", "410500"],
    ["410527", "内黄县", "410500"],
    ["410581", "林州市", "410500"],
    ["410600", "鹤壁市", "410000"],
    ["410602", "鹤山区", "410600"],
    ["410603", "山城区", "410600"],
    ["410611", "淇滨区", "410600"],
    ["410621", "浚县", "410600"],
    ["410622", "淇县", "410600"],
    ["410700", "新乡市", "410000"],
    ["410702", "红旗区", "410700"],
    ["410703", "卫滨区", "410700"],
    ["410704", "凤泉区", "410700"],
    ["410711", "牧野区", "410700"],
    ["410721", "新乡县", "410700"],
    ["410724", "获嘉县", "410700"],
    ["410725", "原阳县", "410700"],
    ["410726", "延津县", "410700"],
    ["410727", "封丘县", "410700"],
    ["410781", "卫辉市", "410700"],
    ["410782", "辉县市", "410700"],
    ["410783", "长垣市", "410700"],
    ["410800", "焦作市", "410000"],
    ["410802", "解放区", "410800"],
    ["410803", "中站区", "410800"],
    ["410804", "马村区", "410800"],
    ["410811", "山阳区", "410800"],
    ["410821", "修武县", "410800"],
    ["410822", "博爱县", "410800"],
    ["410823", "武陟县", "410800"],
    ["410825", "温县", "410800"],
    ["410882", "沁阳市", "410800"],
    ["410883", "孟州市", "410800"],
    ["410900", "濮阳市", "410000"],
    ["410902", "华龙区", "410900"],
    ["410922", "清丰县", "410900"],
    ["410923", "南乐县", "410900"],
    ["410926", "范县", "410900"],
    ["410927", "台前县", "410900"],
    ["410928", "濮阳县", "410900"],
    ["411000", "许昌市", "410000"],
    ["411002", "魏都区", "411000"],
    ["411003", "建安区", "411000"],
    ["411024", "鄢陵县", "411000"],
    ["411025", "襄城县", "411000"],
    ["411081", "禹州市", "411000"],
    ["411082", "长葛市", "411000"],
    ["411100", "漯河市", "410000"],
    ["411102", "源汇区", "411100"],
    ["411103", "郾城区", "411100"],
    ["411104", "召陵区", "411100"],
    ["411121", "舞阳县", "411100"],
    ["411122", "临颍县", "411100"],
    ["411200", "三门峡市", "410000"],
    ["411202", "湖滨区", "411200"],
    ["411203", "陕州区", "411200"],
    ["411221", "渑池县", "411200"],
    ["411224", "卢氏县", "411200"],
    ["411281", "义马市", "411200"],
    ["411282", "灵宝市", "411200"],
    ["411300", "南阳市", "410000"],
    ["411302", "宛城区", "411300"],
    ["411303", "卧龙区", "411300"],
    ["411321", "南召县", "411300"],
    ["411322", "方城县", "411300"],
    ["411323", "西峡县", "411300"],
    ["411324", "镇平县", "411300"],
    ["411325", "内乡县", "411300"],
    ["411326", "淅川县", "411300"],
    ["411327", "社旗县", "411300"],
    ["411328", "唐河县", "411300"],
    ["411329", "新野县", "411300"],
    ["411330", "桐柏县", "411300"],
    ["411381", "邓州市", "411300"],
    ["411400", "商丘市", "410000"],
    ["411402", "梁园区", "411400"],
    ["411403", "睢阳区", "411400"],
    ["411421", "民权县", "411400"],
    ["411422", "睢县", "411400"],
    ["411423", "宁陵县", "411400"],
    ["411424", "柘城县", "411400"],
    ["411425", "虞城县", "411400"],
    ["411426", "夏邑县", "411400"],
    ["411481", "永城市", "411400"],
    ["411500", "信阳市", "410000"],
    ["411502", "浉河区", "411500"],
    ["411503", "平桥区", "411500"],
    ["411521", "罗山县", "411500"],
    ["411522", "光山县", "411500"],
    ["411523", "新县", "411500"],
    ["411524", "商城县", "411500"],
    ["411525", "固始县", "411500"],
    ["411526", "潢川县", "411500"],
    ["411527", "淮滨县", "411500"],
    ["411528", "息县", "411500"],
    ["411600", "周口市", "410000"],
    ["411602", "川汇区", "411600"],
    ["411603", "淮阳区", "411600"],
    ["411621", "扶沟县", "411600"],
    ["411622", "西华县", "411600"],
    ["411623", "商水县", "411600"],
    ["411624", "沈丘县", "411600"],
    ["411625", "郸城县", "411600"],
    ["411627", "太康县", "411600"],
    ["411628", "鹿邑县", "411600"],
    ["411681", "项城市", "411600"],
    ["411700", "驻马店市", "410000"],
    ["411702", "驿城区", "411700"],
    ["411721", "西平县", "411700"],
    ["411722", "上蔡县", "411700"],
    ["411723", "平舆县", "411700"],
    ["411724", "正阳县", "411700"],
    ["411725", "确山县", "411700"],
    ["411726", "泌阳县", "411700"],
    ["411727", "汝南县", "411700"],
    ["411728", "遂平县", "411700"],
    ["411729", "新蔡县", "411700"],
    ["419001", "济源市", "410000"],
    ["419099", "济源市", "419001"],
    ["420100", "武汉市", "420000"],
    ["420102", "江岸区", "420100"],
    ["420103", "江汉区", "420100"],
    ["420104", "硚口区", "420100"],
    ["420105", "汉阳区", "420100"],
    ["420106", "武昌区", "420100"],
    ["420107", "青山区", "420100"],
    ["420111", "洪山区", "420100"],
    ["420112", "东西湖区", "420100"],
    ["420113", "汉南区", "420100"],
    ["420114", "蔡甸区", "420100"],
    ["420115", "江夏区", "420100"],
    ["420116", "黄陂区", "420100"],
    ["420117", "新洲区", "420100"],
    ["420200", "黄石市", "420000"],
    ["420202", "黄石港区", "420200"],
    ["420203", "西塞山区", "420200"],
    ["420204", "下陆区", "420200"],
    ["420205", "铁山区", "420200"],
    ["420222", "阳新县", "420200"],
    ["420281", "大冶市", "420200"],
    ["420300", "十堰市", "420000"],
    ["420302", "茅箭区", "420300"],
    ["420303", "张湾区", "420300"],
    ["420304", "郧阳区", "420300"],
    ["420322", "郧西县", "420300"],
    ["420323", "竹山县", "420300"],
    ["420324", "竹溪县", "420300"],
    ["420325", "房县", "420300"],
    ["420381", "丹江口市", "420300"],
    ["420500", "宜昌市", "420000"],
    ["420502", "西陵区", "420500"],
    ["420503", "伍家岗区", "420500"],
    ["420504", "点军区", "420500"],
    ["420505", "猇亭区", "420500"],
    ["420506", "夷陵区", "420500"],
    ["420525", "远安县", "420500"],
    ["420526", "兴山县", "420500"],
    ["420527", "秭归县", "420500"],
    ["420528", "长阳土家族自治县", "420500"],
    ["420529", "五峰土家族自治县", "420500"],
    ["420581", "宜都市", "420500"],
    ["420582", "当阳市", "420500"],
    ["420583", "枝江市", "420500"],
    ["420600", "襄阳市", "420000"],
    ["420602", "襄城区", "420600"],
    ["420606", "樊城区", "420600"],
    ["420607", "襄州区", "420600"],
    ["420624", "南漳县", "420600"],
    ["420625", "谷城县", "420600"],
    ["420626", "保康县", "420600"],
    ["420682", "老河口市", "420600"],
    ["420683", "枣阳市", "420600"],
    ["420684", "宜城市", "420600"],
    ["420700", "鄂州市", "420000"],
    ["420702", "梁子湖区", "420700"],
    ["420703", "华容区", "420700"],
    ["420704", "鄂城区", "420700"],
    ["420800", "荆门市", "420000"],
    ["420802", "东宝区", "420800"],
    ["420804", "掇刀区", "420800"],
    ["420822", "沙洋县", "420800"],
    ["420881", "钟祥市", "420800"],
    ["420882", "京山市", "420800"],
    ["420900", "孝感市", "420000"],
    ["420902", "孝南区", "420900"],
    ["420921", "孝昌县", "420900"],
    ["420922", "大悟县", "420900"],
    ["420923", "云梦县", "420900"],
    ["420981", "应城市", "420900"],
    ["420982", "安陆市", "420900"],
    ["420984", "汉川市", "420900"],
    ["421000", "荆州市", "420000"],
    ["421002", "沙市区", "421000"],
    ["421003", "荆州区", "421000"],
    ["421022", "公安县", "421000"],
    ["421023", "监利县", "421000"],
    ["421024", "江陵县", "421000"],
    ["421081", "石首市", "421000"],
    ["421083", "洪湖市", "421000"],
    ["421087", "松滋市", "421000"],
    ["421100", "黄冈市", "420000"],
    ["421102", "黄州区", "421100"],
    ["421121", "团风县", "421100"],
    ["421122", "红安县", "421100"],
    ["421123", "罗田县", "421100"],
    ["421124", "英山县", "421100"],
    ["421125", "浠水县", "421100"],
    ["421126", "蕲春县", "421100"],
    ["421127", "黄梅县", "421100"],
    ["421181", "麻城市", "421100"],
    ["421182", "武穴市", "421100"],
    ["421200", "咸宁市", "420000"],
    ["421202", "咸安区", "421200"],
    ["421221", "嘉鱼县", "421200"],
    ["421222", "通城县", "421200"],
    ["421223", "崇阳县", "421200"],
    ["421224", "通山县", "421200"],
    ["421281", "赤壁市", "421200"],
    ["421300", "随州市", "420000"],
    ["421303", "曾都区", "421300"],
    ["421321", "随县", "421300"],
    ["421381", "广水市", "421300"],
    ["422800", "恩施土家族苗族自治州", "420000"],
    ["422801", "恩施市", "422800"],
    ["422802", "利川市", "422800"],
    ["422822", "建始县", "422800"],
    ["422823", "巴东县", "422800"],
    ["422825", "宣恩县", "422800"],
    ["422826", "咸丰县", "422800"],
    ["422827", "来凤县", "422800"],
    ["422828", "鹤峰县", "422800"],
    ["429004", "仙桃市", "420000"],
    ["429098", "仙桃市", "429004"],
    ["429005", "潜江市", "420000"],
    ["429097", "潜江市", "429005"],
    ["429006", "天门市", "420000"],
    ["429096", "天门市", "429006"],
    ["429021", "神农架林区", "420000"],
    ["429094", "神农架林区", "429021"],
    ["430100", "长沙市", "430000"],
    ["430102", "芙蓉区", "430100"],
    ["430103", "天心区", "430100"],
    ["430104", "岳麓区", "430100"],
    ["430105", "开福区", "430100"],
    ["430111", "雨花区", "430100"],
    ["430112", "望城区", "430100"],
    ["430121", "长沙县", "430100"],
    ["430181", "浏阳市", "430100"],
    ["430182", "宁乡市", "430100"],
    ["430200", "株洲市", "430000"],
    ["430202", "荷塘区", "430200"],
    ["430203", "芦淞区", "430200"],
    ["430204", "石峰区", "430200"],
    ["430211", "天元区", "430200"],
    ["430212", "渌口区", "430200"],
    ["430223", "攸县", "430200"],
    ["430224", "茶陵县", "430200"],
    ["430225", "炎陵县", "430200"],
    ["430281", "醴陵市", "430200"],
    ["430300", "湘潭市", "430000"],
    ["430302", "雨湖区", "430300"],
    ["430304", "岳塘区", "430300"],
    ["430321", "湘潭县", "430300"],
    ["430381", "湘乡市", "430300"],
    ["430382", "韶山市", "430300"],
    ["430400", "衡阳市", "430000"],
    ["430405", "珠晖区", "430400"],
    ["430406", "雁峰区", "430400"],
    ["430407", "石鼓区", "430400"],
    ["430408", "蒸湘区", "430400"],
    ["430412", "南岳区", "430400"],
    ["430421", "衡阳县", "430400"],
    ["430422", "衡南县", "430400"],
    ["430423", "衡山县", "430400"],
    ["430424", "衡东县", "430400"],
    ["430426", "祁东县", "430400"],
    ["430481", "耒阳市", "430400"],
    ["430482", "常宁市", "430400"],
    ["430500", "邵阳市", "430000"],
    ["430502", "双清区", "430500"],
    ["430503", "大祥区", "430500"],
    ["430511", "北塔区", "430500"],
    ["430522", "新邵县", "430500"],
    ["430523", "邵阳县", "430500"],
    ["430524", "隆回县", "430500"],
    ["430525", "洞口县", "430500"],
    ["430527", "绥宁县", "430500"],
    ["430528", "新宁县", "430500"],
    ["430529", "城步苗族自治县", "430500"],
    ["430581", "武冈市", "430500"],
    ["430582", "邵东市", "430500"],
    ["430600", "岳阳市", "430000"],
    ["430602", "岳阳楼区", "430600"],
    ["430603", "云溪区", "430600"],
    ["430611", "君山区", "430600"],
    ["430621", "岳阳县", "430600"],
    ["430623", "华容县", "430600"],
    ["430624", "湘阴县", "430600"],
    ["430626", "平江县", "430600"],
    ["430681", "汨罗市", "430600"],
    ["430682", "临湘市", "430600"],
    ["430700", "常德市", "430000"],
    ["430702", "武陵区", "430700"],
    ["430703", "鼎城区", "430700"],
    ["430721", "安乡县", "430700"],
    ["430722", "汉寿县", "430700"],
    ["430723", "澧县", "430700"],
    ["430724", "临澧县", "430700"],
    ["430725", "桃源县", "430700"],
    ["430726", "石门县", "430700"],
    ["430781", "津市市", "430700"],
    ["430800", "张家界市", "430000"],
    ["430802", "永定区", "430800"],
    ["430811", "武陵源区", "430800"],
    ["430821", "慈利县", "430800"],
    ["430822", "桑植县", "430800"],
    ["430900", "益阳市", "430000"],
    ["430902", "资阳区", "430900"],
    ["430903", "赫山区", "430900"],
    ["430921", "南县", "430900"],
    ["430922", "桃江县", "430900"],
    ["430923", "安化县", "430900"],
    ["430981", "沅江市", "430900"],
    ["431000", "郴州市", "430000"],
    ["431002", "北湖区", "431000"],
    ["431003", "苏仙区", "431000"],
    ["431021", "桂阳县", "431000"],
    ["431022", "宜章县", "431000"],
    ["431023", "永兴县", "431000"],
    ["431024", "嘉禾县", "431000"],
    ["431025", "临武县", "431000"],
    ["431026", "汝城县", "431000"],
    ["431027", "桂东县", "431000"],
    ["431028", "安仁县", "431000"],
    ["431081", "资兴市", "431000"],
    ["431100", "永州市", "430000"],
    ["431102", "零陵区", "431100"],
    ["431103", "冷水滩区", "431100"],
    ["431121", "祁阳县", "431100"],
    ["431122", "东安县", "431100"],
    ["431123", "双牌县", "431100"],
    ["431124", "道县", "431100"],
    ["431125", "江永县", "431100"],
    ["431126", "宁远县", "431100"],
    ["431127", "蓝山县", "431100"],
    ["431128", "新田县", "431100"],
    ["431129", "江华瑶族自治县", "431100"],
    ["431200", "怀化市", "430000"],
    ["431202", "鹤城区", "431200"],
    ["431221", "中方县", "431200"],
    ["431222", "沅陵县", "431200"],
    ["431223", "辰溪县", "431200"],
    ["431224", "溆浦县", "431200"],
    ["431225", "会同县", "431200"],
    ["431226", "麻阳苗族自治县", "431200"],
    ["431227", "新晃侗族自治县", "431200"],
    ["431228", "芷江侗族自治县", "431200"],
    ["431229", "靖州苗族侗族自治县", "431200"],
    ["431230", "通道侗族自治县", "431200"],
    ["431281", "洪江市", "431200"],
    ["431300", "娄底市", "430000"],
    ["431302", "娄星区", "431300"],
    ["431321", "双峰县", "431300"],
    ["431322", "新化县", "431300"],
    ["431381", "冷水江市", "431300"],
    ["431382", "涟源市", "431300"],
    ["433100", "湘西土家族苗族自治州", "430000"],
    ["433101", "吉首市", "433100"],
    ["433122", "泸溪县", "433100"],
    ["433123", "凤凰县", "433100"],
    ["433124", "花垣县", "433100"],
    ["433125", "保靖县", "433100"],
    ["433126", "古丈县", "433100"],
    ["433127", "永顺县", "433100"],
    ["433130", "龙山县", "433100"],
    ["440100", "广州市", "440000"],
    ["440103", "荔湾区", "440100"],
    ["440104", "越秀区", "440100"],
    ["440105", "海珠区", "440100"],
    ["440106", "天河区", "440100"],
    ["440111", "白云区", "440100"],
    ["440112", "黄埔区", "440100"],
    ["440113", "番禺区", "440100"],
    ["440114", "花都区", "440100"],
    ["440115", "南沙区", "440100"],
    ["440117", "从化区", "440100"],
    ["440118", "增城区", "440100"],
    ["440200", "韶关市", "440000"],
    ["440203", "武江区", "440200"],
    ["440204", "浈江区", "440200"],
    ["440205", "曲江区", "440200"],
    ["440222", "始兴县", "440200"],
    ["440224", "仁化县", "440200"],
    ["440229", "翁源县", "440200"],
    ["440232", "乳源瑶族自治县", "440200"],
    ["440233", "新丰县", "440200"],
    ["440281", "乐昌市", "440200"],
    ["440282", "南雄市", "440200"],
    ["440300", "深圳市", "440000"],
    ["440303", "罗湖区", "440300"],
    ["440304", "福田区", "440300"],
    ["440305", "南山区", "440300"],
    ["440306", "宝安区", "440300"],
    ["440307", "龙岗区", "440300"],
    ["440308", "盐田区", "440300"],
    ["440309", "龙华区", "440300"],
    ["440310", "坪山区", "440300"],
    ["440311", "光明区", "440300"],
    ["440312", "龙华新区", "440300"],
    ["440400", "珠海市", "440000"],
    ["440402", "香洲区", "440400"],
    ["440403", "斗门区", "440400"],
    ["440404", "金湾区", "440400"],
    ["440500", "汕头市", "440000"],
    ["440507", "龙湖区", "440500"],
    ["440511", "金平区", "440500"],
    ["440512", "濠江区", "440500"],
    ["440513", "潮阳区", "440500"],
    ["440514", "潮南区", "440500"],
    ["440515", "澄海区", "440500"],
    ["440523", "南澳县", "440500"],
    ["440600", "佛山市", "440000"],
    ["440604", "禅城区", "440600"],
    ["440605", "南海区", "440600"],
    ["440606", "顺德区", "440600"],
    ["440607", "三水区", "440600"],
    ["440608", "高明区", "440600"],
    ["440609", "乐从", "440600"],
    ["440700", "江门市", "440000"],
    ["440703", "蓬江区", "440700"],
    ["440704", "江海区", "440700"],
    ["440705", "新会区", "440700"],
    ["440781", "台山市", "440700"],
    ["440783", "开平市", "440700"],
    ["440784", "鹤山市", "440700"],
    ["440785", "恩平市", "440700"],
    ["440800", "湛江市", "440000"],
    ["440802", "赤坎区", "440800"],
    ["440803", "霞山区", "440800"],
    ["440804", "坡头区", "440800"],
    ["440811", "麻章区", "440800"],
    ["440823", "遂溪县", "440800"],
    ["440825", "徐闻县", "440800"],
    ["440881", "廉江市", "440800"],
    ["440882", "雷州市", "440800"],
    ["440883", "吴川市", "440800"],
    ["440900", "茂名市", "440000"],
    ["440902", "茂南区", "440900"],
    ["440904", "电白区", "440900"],
    ["440981", "高州市", "440900"],
    ["440982", "化州市", "440900"],
    ["440983", "信宜市", "440900"],
    ["441200", "肇庆市", "440000"],
    ["441202", "端州区", "441200"],
    ["441203", "鼎湖区", "441200"],
    ["441204", "高要区", "441200"],
    ["441223", "广宁县", "441200"],
    ["441224", "怀集县", "441200"],
    ["441225", "封开县", "441200"],
    ["441226", "德庆县", "441200"],
    ["441284", "四会市", "441200"],
    ["441300", "惠州市", "440000"],
    ["441302", "惠城区", "441300"],
    ["441303", "惠阳区", "441300"],
    ["441322", "博罗县", "441300"],
    ["441323", "惠东县", "441300"],
    ["441324", "龙门县", "441300"],
    ["441400", "梅州市", "440000"],
    ["441402", "梅江区", "441400"],
    ["441403", "梅县区", "441400"],
    ["441422", "大埔县", "441400"],
    ["441423", "丰顺县", "441400"],
    ["441424", "五华县", "441400"],
    ["441426", "平远县", "441400"],
    ["441427", "蕉岭县", "441400"],
    ["441481", "兴宁市", "441400"],
    ["441500", "汕尾市", "440000"],
    ["441502", "城区", "441500"],
    ["441521", "海丰县", "441500"],
    ["441523", "陆河县", "441500"],
    ["441581", "陆丰市", "441500"],
    ["441600", "河源市", "440000"],
    ["441602", "源城区", "441600"],
    ["441621", "紫金县", "441600"],
    ["441622", "龙川县", "441600"],
    ["441623", "连平县", "441600"],
    ["441624", "和平县", "441600"],
    ["441625", "东源县", "441600"],
    ["441700", "阳江市", "440000"],
    ["441702", "江城区", "441700"],
    ["441704", "阳东区", "441700"],
    ["441721", "阳西县", "441700"],
    ["441781", "阳春市", "441700"],
    ["441800", "清远市", "440000"],
    ["441802", "清城区", "441800"],
    ["441803", "清新区", "441800"],
    ["441821", "佛冈县", "441800"],
    ["441823", "阳山县", "441800"],
    ["441825", "连山壮族瑶族自治县", "441800"],
    ["441826", "连南瑶族自治县", "441800"],
    ["441881", "英德市", "441800"],
    ["441882", "连州市", "441800"],
    ["441900", "东莞市", "440000"],
    ["441901", "莞城区", "441900"],
    ["441902", "南城区", "441900"],
    ["441903", "东城区", "441900"],
    ["441904", "万江区", "441900"],
    ["441905", "石碣镇", "441900"],
    ["441906", "石龙镇", "441900"],
    ["441907", "茶山镇", "441900"],
    ["441908", "石排镇", "441900"],
    ["441909", "企石镇", "441900"],
    ["441910", "横沥镇", "441900"],
    ["441911", "桥头镇", "441900"],
    ["441912", "谢岗镇", "441900"],
    ["441913", "东坑镇", "441900"],
    ["441914", "常平镇", "441900"],
    ["441915", "寮步镇", "441900"],
    ["441916", "大朗镇", "441900"],
    ["441917", "麻涌镇", "441900"],
    ["441918", "中堂镇", "441900"],
    ["441919", "高埗镇", "441900"],
    ["441920", "樟木头镇", "441900"],
    ["441921", "大岭山镇", "441900"],
    ["441922", "望牛墩镇", "441900"],
    ["441923", "黄江镇", "441900"],
    ["441924", "洪梅镇", "441900"],
    ["441925", "清溪镇", "441900"],
    ["441926", "沙田镇", "441900"],
    ["441927", "道滘镇", "441900"],
    ["441928", "塘厦镇", "441900"],
    ["441929", "虎门镇", "441900"],
    ["441930", "厚街镇", "441900"],
    ["441931", "凤岗镇", "441900"],
    ["441932", "长安镇", "441900"],
    ["442000", "中山市", "440000"],
    ["442001", "石岐区", "442000"],
    ["442002", "东区", "442000"],
    ["442003", "西区", "442000"],
    ["442004", "南区", "442000"],
    ["442005", "五桂山区", "442000"],
    ["442006", "火炬开发区", "442000"],
    ["442007", "黄圃镇", "442000"],
    ["442008", "南头镇", "442000"],
    ["442009", "东凤镇", "442000"],
    ["442010", "阜沙镇", "442000"],
    ["442011", "小榄镇", "442000"],
    ["442012", "东升镇", "442000"],
    ["442013", "古镇镇", "442000"],
    ["442014", "横栏镇", "442000"],
    ["442015", "三角镇", "442000"],
    ["442016", "民众镇", "442000"],
    ["442017", "南朗镇", "442000"],
    ["442018", "港口镇", "442000"],
    ["442019", "大涌镇", "442000"],
    ["442020", "沙溪镇", "442000"],
    ["442021", "三乡镇", "442000"],
    ["442022", "板芙镇", "442000"],
    ["442023", "神湾镇", "442000"],
    ["442024", "坦洲镇", "442000"],
    ["445100", "潮州市", "440000"],
    ["445102", "湘桥区", "445100"],
    ["445103", "潮安区", "445100"],
    ["445122", "饶平县", "445100"],
    ["445200", "揭阳市", "440000"],
    ["445202", "榕城区", "445200"],
    ["445203", "揭东区", "445200"],
    ["445222", "揭西县", "445200"],
    ["445224", "惠来县", "445200"],
    ["445281", "普宁市", "445200"],
    ["445300", "云浮市", "440000"],
    ["445302", "云城区", "445300"],
    ["445303", "云安区", "445300"],
    ["445321", "新兴县", "445300"],
    ["445322", "郁南县", "445300"],
    ["445381", "罗定市", "445300"],
    ["450100", "南宁市", "450000"],
    ["450102", "兴宁区", "450100"],
    ["450103", "青秀区", "450100"],
    ["450105", "江南区", "450100"],
    ["450107", "西乡塘区", "450100"],
    ["450108", "良庆区", "450100"],
    ["450109", "邕宁区", "450100"],
    ["450110", "武鸣区", "450100"],
    ["450123", "隆安县", "450100"],
    ["450124", "马山县", "450100"],
    ["450125", "上林县", "450100"],
    ["450126", "宾阳县", "450100"],
    ["450127", "横县", "450100"],
    ["450128", "埌东新区", "450100"],
    ["450200", "柳州市", "450000"],
    ["450202", "城中区", "450200"],
    ["450203", "鱼峰区", "450200"],
    ["450204", "柳南区", "450200"],
    ["450205", "柳北区", "450200"],
    ["450206", "柳江区", "450200"],
    ["450222", "柳城县", "450200"],
    ["450223", "鹿寨县", "450200"],
    ["450224", "融安县", "450200"],
    ["450225", "融水苗族自治县", "450200"],
    ["450226", "三江侗族自治县", "450200"],
    ["450227", "柳东新区", "450200"],
    ["450300", "桂林市", "450000"],
    ["450302", "秀峰区", "450300"],
    ["450303", "叠彩区", "450300"],
    ["450304", "象山区", "450300"],
    ["450305", "七星区", "450300"],
    ["450311", "雁山区", "450300"],
    ["450312", "临桂区", "450300"],
    ["450321", "阳朔县", "450300"],
    ["450323", "灵川县", "450300"],
    ["450324", "全州县", "450300"],
    ["450325", "兴安县", "450300"],
    ["450326", "永福县", "450300"],
    ["450327", "灌阳县", "450300"],
    ["450328", "龙胜各族自治县", "450300"],
    ["450329", "资源县", "450300"],
    ["450330", "平乐县", "450300"],
    ["450332", "恭城瑶族自治县", "450300"],
    ["450381", "荔浦市", "450300"],
    ["450400", "梧州市", "450000"],
    ["450403", "万秀区", "450400"],
    ["450405", "长洲区", "450400"],
    ["450406", "龙圩区", "450400"],
    ["450421", "苍梧县", "450400"],
    ["450422", "藤县", "450400"],
    ["450423", "蒙山县", "450400"],
    ["450481", "岑溪市", "450400"],
    ["450500", "北海市", "450000"],
    ["450502", "海城区", "450500"],
    ["450503", "银海区", "450500"],
    ["450512", "铁山港区", "450500"],
    ["450521", "合浦县", "450500"],
    ["450600", "防城港市", "450000"],
    ["450602", "港口区", "450600"],
    ["450603", "防城区", "450600"],
    ["450621", "上思县", "450600"],
    ["450681", "东兴市", "450600"],
    ["450700", "钦州市", "450000"],
    ["450702", "钦南区", "450700"],
    ["450703", "钦北区", "450700"],
    ["450721", "灵山县", "450700"],
    ["450722", "浦北县", "450700"],
    ["450800", "贵港市", "450000"],
    ["450802", "港北区", "450800"],
    ["450803", "港南区", "450800"],
    ["450804", "覃塘区", "450800"],
    ["450821", "平南县", "450800"],
    ["450881", "桂平市", "450800"],
    ["450900", "玉林市", "450000"],
    ["450902", "玉州区", "450900"],
    ["450903", "福绵区", "450900"],
    ["450921", "容县", "450900"],
    ["450922", "陆川县", "450900"],
    ["450923", "博白县", "450900"],
    ["450924", "兴业县", "450900"],
    ["450981", "北流市", "450900"],
    ["450982", "玉东新区", "450900"],
    ["451000", "百色市", "450000"],
    ["451002", "右江区", "451000"],
    ["451003", "田阳区", "451000"],
    ["451022", "田东县", "451000"],
    ["451024", "德保县", "451000"],
    ["451026", "那坡县", "451000"],
    ["451027", "凌云县", "451000"],
    ["451028", "乐业县", "451000"],
    ["451029", "田林县", "451000"],
    ["451030", "西林县", "451000"],
    ["451031", "隆林各族自治县", "451000"],
    ["451081", "靖西市", "451000"],
    ["451082", "平果市", "451000"],
    ["451100", "贺州市", "450000"],
    ["451102", "八步区", "451100"],
    ["451103", "平桂区", "451100"],
    ["451121", "昭平县", "451100"],
    ["451122", "钟山县", "451100"],
    ["451123", "富川瑶族自治县", "451100"],
    ["451200", "河池市", "450000"],
    ["451202", "金城江区", "451200"],
    ["451203", "宜州区", "451200"],
    ["451221", "南丹县", "451200"],
    ["451222", "天峨县", "451200"],
    ["451223", "凤山县", "451200"],
    ["451224", "东兰县", "451200"],
    ["451225", "罗城仫佬族自治县", "451200"],
    ["451226", "环江毛南族自治县", "451200"],
    ["451227", "巴马瑶族自治县", "451200"],
    ["451228", "都安瑶族自治县", "451200"],
    ["451229", "大化瑶族自治县", "451200"],
    ["451300", "来宾市", "450000"],
    ["451302", "兴宾区", "451300"],
    ["451321", "忻城县", "451300"],
    ["451322", "象州县", "451300"],
    ["451323", "武宣县", "451300"],
    ["451324", "金秀瑶族自治县", "451300"],
    ["451381", "合山市", "451300"],
    ["451400", "崇左市", "450000"],
    ["451402", "江州区", "451400"],
    ["451421", "扶绥县", "451400"],
    ["451422", "宁明县", "451400"],
    ["451423", "龙州县", "451400"],
    ["451424", "大新县", "451400"],
    ["451425", "天等县", "451400"],
    ["451481", "凭祥市", "451400"],
    ["460100", "海口市", "460000"],
    ["460105", "秀英区", "460100"],
    ["460106", "龙华区", "460100"],
    ["460107", "琼山区", "460100"],
    ["460108", "美兰区", "460100"],
    ["460200", "三亚市", "460000"],
    ["460202", "海棠区", "460200"],
    ["460203", "吉阳区", "460200"],
    ["460204", "天涯区", "460200"],
    ["460205", "崖州区", "460200"],
    ["460300", "三沙市", "460000"],
    ["460321", "西沙群岛", "460300"],
    ["460322", "南沙群岛", "460300"],
    ["460323", "中沙群岛", "460300"],
    ["460400", "儋州市", "460000"],
    ["460499", "儋州市", "460400"],
    ["469001", "五指山市", "460000"],
    ["469099", "五指山市", "469001"],
    ["469002", "琼海市", "460000"],
    ["469098", "琼海市", "469002"],
    ["469005", "文昌市", "460000"],
    ["469097", "文昌市", "469005"],
    ["469006", "万宁市", "460000"],
    ["469096", "万宁市", "469006"],
    ["469007", "东方市", "460000"],
    ["469095", "东方市", "469007"],
    ["469021", "定安县", "460000"],
    ["469094", "定安县", "469021"],
    ["469022", "屯昌县", "460000"],
    ["469093", "屯昌县", "469022"],
    ["469023", "澄迈县", "460000"],
    ["469092", "澄迈县", "469023"],
    ["469024", "临高县", "460000"],
    ["469091", "临高县", "469024"],
    ["469025", "白沙黎族自治县", "460000"],
    ["469090", "白沙黎族自治县", "469025"],
    ["469026", "昌江黎族自治县", "460000"],
    ["469089", "昌江黎族自治县", "469026"],
    ["469027", "乐东黎族自治县", "460000"],
    ["469088", "乐东黎族自治县", "469027"],
    ["469028", "陵水黎族自治县", "460000"],
    ["469087", "陵水黎族自治县", "469028"],
    ["469029", "保亭黎族苗族自治县", "460000"],
    ["469086", "保亭黎族苗族自治县", "469029"],
    ["469030", "琼中黎族苗族自治县", "460000"],
    ["469085", "琼中黎族苗族自治县", "469030"],
    ["500100", "重庆市", "500000"],
    ["500101", "万州区", "500100"],
    ["500102", "涪陵区", "500100"],
    ["500103", "渝中区", "500100"],
    ["500104", "大渡口区", "500100"],
    ["500105", "江北区", "500100"],
    ["500106", "沙坪坝区", "500100"],
    ["500107", "九龙坡区", "500100"],
    ["500108", "南岸区", "500100"],
    ["500109", "北碚区", "500100"],
    ["500110", "綦江区", "500100"],
    ["500111", "大足区", "500100"],
    ["500112", "渝北区", "500100"],
    ["500113", "巴南区", "500100"],
    ["500114", "黔江区", "500100"],
    ["500115", "长寿区", "500100"],
    ["500116", "江津区", "500100"],
    ["500117", "合川区", "500100"],
    ["500118", "永川区", "500100"],
    ["500119", "南川区", "500100"],
    ["500120", "璧山区", "500100"],
    ["500151", "铜梁区", "500100"],
    ["500152", "潼南区", "500100"],
    ["500153", "荣昌区", "500100"],
    ["500154", "开州区", "500100"],
    ["500155", "梁平区", "500100"],
    ["500156", "武隆区", "500100"],
    ["500229", "城口县", "500100"],
    ["500230", "丰都县", "500100"],
    ["500231", "垫江县", "500100"],
    ["500233", "忠县", "500100"],
    ["500235", "云阳县", "500100"],
    ["500236", "奉节县", "500100"],
    ["500237", "巫山县", "500100"],
    ["500238", "巫溪县", "500100"],
    ["500240", "石柱土家族自治县", "500100"],
    ["500241", "秀山土家族苗族自治县", "500100"],
    ["500242", "酉阳土家族苗族自治县", "500100"],
    ["500243", "彭水苗族土家族自治县", "500100"],
    ["500300", "两江新区", "500100"],
    ["510100", "成都市", "510000"],
    ["510104", "锦江区", "510100"],
    ["510105", "青羊区", "510100"],
    ["510106", "金牛区", "510100"],
    ["510107", "武侯区", "510100"],
    ["510108", "成华区", "510100"],
    ["510112", "龙泉驿区", "510100"],
    ["510113", "青白江区", "510100"],
    ["510114", "新都区", "510100"],
    ["510115", "温江区", "510100"],
    ["510116", "双流区", "510100"],
    ["510117", "郫都区", "510100"],
    ["510121", "金堂县", "510100"],
    ["510129", "大邑县", "510100"],
    ["510131", "蒲江县", "510100"],
    ["510132", "新津县", "510100"],
    ["510181", "都江堰市", "510100"],
    ["510182", "彭州市", "510100"],
    ["510183", "邛崃市", "510100"],
    ["510184", "崇州市", "510100"],
    ["510185", "简阳市", "510100"],
    ["510300", "自贡市", "510000"],
    ["510302", "自流井区", "510300"],
    ["510303", "贡井区", "510300"],
    ["510304", "大安区", "510300"],
    ["510311", "沿滩区", "510300"],
    ["510321", "荣县", "510300"],
    ["510322", "富顺县", "510300"],
    ["510400", "攀枝花市", "510000"],
    ["510402", "东区", "510400"],
    ["510403", "西区", "510400"],
    ["510411", "仁和区", "510400"],
    ["510421", "米易县", "510400"],
    ["510422", "盐边县", "510400"],
    ["510500", "泸州市", "510000"],
    ["510502", "江阳区", "510500"],
    ["510503", "纳溪区", "510500"],
    ["510504", "龙马潭区", "510500"],
    ["510521", "泸县", "510500"],
    ["510522", "合江县", "510500"],
    ["510524", "叙永县", "510500"],
    ["510525", "古蔺县", "510500"],
    ["510600", "德阳市", "510000"],
    ["510603", "旌阳区", "510600"],
    ["510604", "罗江区", "510600"],
    ["510623", "中江县", "510600"],
    ["510681", "广汉市", "510600"],
    ["510682", "什邡市", "510600"],
    ["510683", "绵竹市", "510600"],
    ["510700", "绵阳市", "510000"],
    ["510703", "涪城区", "510700"],
    ["510704", "游仙区", "510700"],
    ["510705", "安州区", "510700"],
    ["510722", "三台县", "510700"],
    ["510723", "盐亭县", "510700"],
    ["510725", "梓潼县", "510700"],
    ["510726", "北川羌族自治县", "510700"],
    ["510727", "平武县", "510700"],
    ["510781", "江油市", "510700"],
    ["510800", "广元市", "510000"],
    ["510802", "利州区", "510800"],
    ["510811", "昭化区", "510800"],
    ["510812", "朝天区", "510800"],
    ["510821", "旺苍县", "510800"],
    ["510822", "青川县", "510800"],
    ["510823", "剑阁县", "510800"],
    ["510824", "苍溪县", "510800"],
    ["510900", "遂宁市", "510000"],
    ["510903", "船山区", "510900"],
    ["510904", "安居区", "510900"],
    ["510921", "蓬溪县", "510900"],
    ["510923", "大英县", "510900"],
    ["510981", "射洪市", "510900"],
    ["511000", "内江市", "510000"],
    ["511002", "市中区", "511000"],
    ["511011", "东兴区", "511000"],
    ["511024", "威远县", "511000"],
    ["511025", "资中县", "511000"],
    ["511083", "隆昌市", "511000"],
    ["511100", "乐山市", "510000"],
    ["511102", "市中区", "511100"],
    ["511111", "沙湾区", "511100"],
    ["511112", "五通桥区", "511100"],
    ["511113", "金口河区", "511100"],
    ["511123", "犍为县", "511100"],
    ["511124", "井研县", "511100"],
    ["511126", "夹江县", "511100"],
    ["511129", "沐川县", "511100"],
    ["511132", "峨边彝族自治县", "511100"],
    ["511133", "马边彝族自治县", "511100"],
    ["511181", "峨眉山市", "511100"],
    ["511300", "南充市", "510000"],
    ["511302", "顺庆区", "511300"],
    ["511303", "高坪区", "511300"],
    ["511304", "嘉陵区", "511300"],
    ["511321", "南部县", "511300"],
    ["511322", "营山县", "511300"],
    ["511323", "蓬安县", "511300"],
    ["511324", "仪陇县", "511300"],
    ["511325", "西充县", "511300"],
    ["511381", "阆中市", "511300"],
    ["511400", "眉山市", "510000"],
    ["511402", "东坡区", "511400"],
    ["511403", "彭山区", "511400"],
    ["511421", "仁寿县", "511400"],
    ["511423", "洪雅县", "511400"],
    ["511424", "丹棱县", "511400"],
    ["511425", "青神县", "511400"],
    ["511500", "宜宾市", "510000"],
    ["511502", "翠屏区", "511500"],
    ["511503", "南溪区", "511500"],
    ["511504", "叙州区", "511500"],
    ["511523", "江安县", "511500"],
    ["511524", "长宁县", "511500"],
    ["511525", "高县", "511500"],
    ["511526", "珙县", "511500"],
    ["511527", "筠连县", "511500"],
    ["511528", "兴文县", "511500"],
    ["511529", "屏山县", "511500"],
    ["511600", "广安市", "510000"],
    ["511602", "广安区", "511600"],
    ["511603", "前锋区", "511600"],
    ["511621", "岳池县", "511600"],
    ["511622", "武胜县", "511600"],
    ["511623", "邻水县", "511600"],
    ["511681", "华蓥市", "511600"],
    ["511700", "达州市", "510000"],
    ["511702", "通川区", "511700"],
    ["511703", "达川区", "511700"],
    ["511722", "宣汉县", "511700"],
    ["511723", "开江县", "511700"],
    ["511724", "大竹县", "511700"],
    ["511725", "渠县", "511700"],
    ["511781", "万源市", "511700"],
    ["511800", "雅安市", "510000"],
    ["511802", "雨城区", "511800"],
    ["511803", "名山区", "511800"],
    ["511822", "荥经县", "511800"],
    ["511823", "汉源县", "511800"],
    ["511824", "石棉县", "511800"],
    ["511825", "天全县", "511800"],
    ["511826", "芦山县", "511800"],
    ["511827", "宝兴县", "511800"],
    ["511900", "巴中市", "510000"],
    ["511902", "巴州区", "511900"],
    ["511903", "恩阳区", "511900"],
    ["511921", "通江县", "511900"],
    ["511922", "南江县", "511900"],
    ["511923", "平昌县", "511900"],
    ["512000", "资阳市", "510000"],
    ["512002", "雁江区", "512000"],
    ["512021", "安岳县", "512000"],
    ["512022", "乐至县", "512000"],
    ["513200", "阿坝藏族羌族自治州", "510000"],
    ["513201", "马尔康市", "513200"],
    ["513221", "汶川县", "513200"],
    ["513222", "理县", "513200"],
    ["513223", "茂县", "513200"],
    ["513224", "松潘县", "513200"],
    ["513225", "九寨沟县", "513200"],
    ["513226", "金川县", "513200"],
    ["513227", "小金县", "513200"],
    ["513228", "黑水县", "513200"],
    ["513230", "壤塘县", "513200"],
    ["513231", "阿坝县", "513200"],
    ["513232", "若尔盖县", "513200"],
    ["513233", "红原县", "513200"],
    ["513300", "甘孜藏族自治州", "510000"],
    ["513301", "康定市", "513300"],
    ["513322", "泸定县", "513300"],
    ["513323", "丹巴县", "513300"],
    ["513324", "九龙县", "513300"],
    ["513325", "雅江县", "513300"],
    ["513326", "道孚县", "513300"],
    ["513327", "炉霍县", "513300"],
    ["513328", "甘孜县", "513300"],
    ["513329", "新龙县", "513300"],
    ["513330", "德格县", "513300"],
    ["513331", "白玉县", "513300"],
    ["513332", "石渠县", "513300"],
    ["513333", "色达县", "513300"],
    ["513334", "理塘县", "513300"],
    ["513335", "巴塘县", "513300"],
    ["513336", "乡城县", "513300"],
    ["513337", "稻城县", "513300"],
    ["513338", "得荣县", "513300"],
    ["513400", "凉山彝族自治州", "510000"],
    ["513401", "西昌市", "513400"],
    ["513422", "木里藏族自治县", "513400"],
    ["513423", "盐源县", "513400"],
    ["513424", "德昌县", "513400"],
    ["513425", "会理县", "513400"],
    ["513426", "会东县", "513400"],
    ["513427", "宁南县", "513400"],
    ["513428", "普格县", "513400"],
    ["513429", "布拖县", "513400"],
    ["513430", "金阳县", "513400"],
    ["513431", "昭觉县", "513400"],
    ["513432", "喜德县", "513400"],
    ["513433", "冕宁县", "513400"],
    ["513434", "越西县", "513400"],
    ["513435", "甘洛县", "513400"],
    ["513436", "美姑县", "513400"],
    ["513437", "雷波县", "513400"],
    ["520100", "贵阳市", "520000"],
    ["520102", "南明区", "520100"],
    ["520103", "云岩区", "520100"],
    ["520111", "花溪区", "520100"],
    ["520112", "乌当区", "520100"],
    ["520113", "白云区", "520100"],
    ["520115", "观山湖区", "520100"],
    ["520121", "开阳县", "520100"],
    ["520122", "息烽县", "520100"],
    ["520123", "修文县", "520100"],
    ["520181", "清镇市", "520100"],
    ["520200", "六盘水市", "520000"],
    ["520201", "钟山区", "520200"],
    ["520203", "六枝特区", "520200"],
    ["520221", "水城县", "520200"],
    ["520281", "盘州市", "520200"],
    ["520300", "遵义市", "520000"],
    ["520302", "红花岗区", "520300"],
    ["520303", "汇川区", "520300"],
    ["520304", "播州区", "520300"],
    ["520322", "桐梓县", "520300"],
    ["520323", "绥阳县", "520300"],
    ["520324", "正安县", "520300"],
    ["520325", "道真仡佬族苗族自治县", "520300"],
    ["520326", "务川仡佬族苗族自治县", "520300"],
    ["520327", "凤冈县", "520300"],
    ["520328", "湄潭县", "520300"],
    ["520329", "余庆县", "520300"],
    ["520330", "习水县", "520300"],
    ["520381", "赤水市", "520300"],
    ["520382", "仁怀市", "520300"],
    ["520400", "安顺市", "520000"],
    ["520402", "西秀区", "520400"],
    ["520403", "平坝区", "520400"],
    ["520422", "普定县", "520400"],
    ["520423", "镇宁布依族苗族自治县", "520400"],
    ["520424", "关岭布依族苗族自治县", "520400"],
    ["520425", "紫云苗族布依族自治县", "520400"],
    ["520500", "毕节市", "520000"],
    ["520502", "七星关区", "520500"],
    ["520521", "大方县", "520500"],
    ["520522", "黔西县", "520500"],
    ["520523", "金沙县", "520500"],
    ["520524", "织金县", "520500"],
    ["520525", "纳雍县", "520500"],
    ["520526", "威宁彝族回族苗族自治县", "520500"],
    ["520527", "赫章县", "520500"],
    ["520600", "铜仁市", "520000"],
    ["520602", "碧江区", "520600"],
    ["520603", "万山区", "520600"],
    ["520621", "江口县", "520600"],
    ["520622", "玉屏侗族自治县", "520600"],
    ["520623", "石阡县", "520600"],
    ["520624", "思南县", "520600"],
    ["520625", "印江土家族苗族自治县", "520600"],
    ["520626", "德江县", "520600"],
    ["520627", "沿河土家族自治县", "520600"],
    ["520628", "松桃苗族自治县", "520600"],
    ["522300", "黔西南布依族苗族自治州", "520000"],
    ["522301", "兴义市", "522300"],
    ["522302", "兴仁市", "522300"],
    ["522323", "普安县", "522300"],
    ["522324", "晴隆县", "522300"],
    ["522325", "贞丰县", "522300"],
    ["522326", "望谟县", "522300"],
    ["522327", "册亨县", "522300"],
    ["522328", "安龙县", "522300"],
    ["522600", "黔东南苗族侗族自治州", "520000"],
    ["522601", "凯里市", "522600"],
    ["522622", "黄平县", "522600"],
    ["522623", "施秉县", "522600"],
    ["522624", "三穗县", "522600"],
    ["522625", "镇远县", "522600"],
    ["522626", "岑巩县", "522600"],
    ["522627", "天柱县", "522600"],
    ["522628", "锦屏县", "522600"],
    ["522629", "剑河县", "522600"],
    ["522630", "台江县", "522600"],
    ["522631", "黎平县", "522600"],
    ["522632", "榕江县", "522600"],
    ["522633", "从江县", "522600"],
    ["522634", "雷山县", "522600"],
    ["522635", "麻江县", "522600"],
    ["522636", "丹寨县", "522600"],
    ["522700", "黔南布依族苗族自治州", "520000"],
    ["522701", "都匀市", "522700"],
    ["522702", "福泉市", "522700"],
    ["522722", "荔波县", "522700"],
    ["522723", "贵定县", "522700"],
    ["522725", "瓮安县", "522700"],
    ["522726", "独山县", "522700"],
    ["522727", "平塘县", "522700"],
    ["522728", "罗甸县", "522700"],
    ["522729", "长顺县", "522700"],
    ["522730", "龙里县", "522700"],
    ["522731", "惠水县", "522700"],
    ["522732", "三都水族自治县", "522700"],
    ["530100", "昆明市", "530000"],
    ["530102", "五华区", "530100"],
    ["530103", "盘龙区", "530100"],
    ["530111", "官渡区", "530100"],
    ["530112", "西山区", "530100"],
    ["530113", "东川区", "530100"],
    ["530114", "呈贡区", "530100"],
    ["530115", "晋宁区", "530100"],
    ["530124", "富民县", "530100"],
    ["530125", "宜良县", "530100"],
    ["530126", "石林彝族自治县", "530100"],
    ["530127", "嵩明县", "530100"],
    ["530128", "禄劝彝族苗族自治县", "530100"],
    ["530129", "寻甸回族彝族自治县", "530100"],
    ["530181", "安宁市", "530100"],
    ["530300", "曲靖市", "530000"],
    ["530302", "麒麟区", "530300"],
    ["530303", "沾益区", "530300"],
    ["530304", "马龙区", "530300"],
    ["530322", "陆良县", "530300"],
    ["530323", "师宗县", "530300"],
    ["530324", "罗平县", "530300"],
    ["530325", "富源县", "530300"],
    ["530326", "会泽县", "530300"],
    ["530381", "宣威市", "530300"],
    ["530400", "玉溪市", "530000"],
    ["530402", "红塔区", "530400"],
    ["530403", "江川区", "530400"],
    ["530423", "通海县", "530400"],
    ["530424", "华宁县", "530400"],
    ["530425", "易门县", "530400"],
    ["530426", "峨山彝族自治县", "530400"],
    ["530427", "新平彝族傣族自治县", "530400"],
    ["530428", "元江哈尼族彝族傣族自治县", "530400"],
    ["530481", "澄江市", "530400"],
    ["530500", "保山市", "530000"],
    ["530502", "隆阳区", "530500"],
    ["530521", "施甸县", "530500"],
    ["530523", "龙陵县", "530500"],
    ["530524", "昌宁县", "530500"],
    ["530581", "腾冲市", "530500"],
    ["530600", "昭通市", "530000"],
    ["530602", "昭阳区", "530600"],
    ["530621", "鲁甸县", "530600"],
    ["530622", "巧家县", "530600"],
    ["530623", "盐津县", "530600"],
    ["530624", "大关县", "530600"],
    ["530625", "永善县", "530600"],
    ["530626", "绥江县", "530600"],
    ["530627", "镇雄县", "530600"],
    ["530628", "彝良县", "530600"],
    ["530629", "威信县", "530600"],
    ["530681", "水富市", "530600"],
    ["530700", "丽江市", "530000"],
    ["530702", "古城区", "530700"],
    ["530721", "玉龙纳西族自治县", "530700"],
    ["530722", "永胜县", "530700"],
    ["530723", "华坪县", "530700"],
    ["530724", "宁蒗彝族自治县", "530700"],
    ["530800", "普洱市", "530000"],
    ["530802", "思茅区", "530800"],
    ["530821", "宁洱哈尼族彝族自治县", "530800"],
    ["530822", "墨江哈尼族自治县", "530800"],
    ["530823", "景东彝族自治县", "530800"],
    ["530824", "景谷傣族彝族自治县", "530800"],
    ["530825", "镇沅彝族哈尼族拉祜族自治县", "530800"],
    ["530826", "江城哈尼族彝族自治县", "530800"],
    ["530827", "孟连傣族拉祜族佤族自治县", "530800"],
    ["530828", "澜沧拉祜族自治县", "530800"],
    ["530829", "西盟佤族自治县", "530800"],
    ["530900", "临沧市", "530000"],
    ["530902", "临翔区", "530900"],
    ["530921", "凤庆县", "530900"],
    ["530922", "云县", "530900"],
    ["530923", "永德县", "530900"],
    ["530924", "镇康县", "530900"],
    ["530925", "双江拉祜族佤族布朗族傣族自治县", "530900"],
    ["530926", "耿马傣族佤族自治县", "530900"],
    ["530927", "沧源佤族自治县", "530900"],
    ["532300", "楚雄彝族自治州", "530000"],
    ["532301", "楚雄市", "532300"],
    ["532322", "双柏县", "532300"],
    ["532323", "牟定县", "532300"],
    ["532324", "南华县", "532300"],
    ["532325", "姚安县", "532300"],
    ["532326", "大姚县", "532300"],
    ["532327", "永仁县", "532300"],
    ["532328", "元谋县", "532300"],
    ["532329", "武定县", "532300"],
    ["532331", "禄丰县", "532300"],
    ["532500", "红河哈尼族彝族自治州", "530000"],
    ["532501", "个旧市", "532500"],
    ["532502", "开远市", "532500"],
    ["532503", "蒙自市", "532500"],
    ["532504", "弥勒市", "532500"],
    ["532523", "屏边苗族自治县", "532500"],
    ["532524", "建水县", "532500"],
    ["532525", "石屏县", "532500"],
    ["532527", "泸西县", "532500"],
    ["532528", "元阳县", "532500"],
    ["532529", "红河县", "532500"],
    ["532530", "金平苗族瑶族傣族自治县", "532500"],
    ["532531", "绿春县", "532500"],
    ["532532", "河口瑶族自治县", "532500"],
    ["532600", "文山壮族苗族自治州", "530000"],
    ["532601", "文山市", "532600"],
    ["532622", "砚山县", "532600"],
    ["532623", "西畴县", "532600"],
    ["532624", "麻栗坡县", "532600"],
    ["532625", "马关县", "532600"],
    ["532626", "丘北县", "532600"],
    ["532627", "广南县", "532600"],
    ["532628", "富宁县", "532600"],
    ["532800", "西双版纳傣族自治州", "530000"],
    ["532801", "景洪市", "532800"],
    ["532822", "勐海县", "532800"],
    ["532823", "勐腊县", "532800"],
    ["532900", "大理白族自治州", "530000"],
    ["532901", "大理市", "532900"],
    ["532922", "漾濞彝族自治县", "532900"],
    ["532923", "祥云县", "532900"],
    ["532924", "宾川县", "532900"],
    ["532925", "弥渡县", "532900"],
    ["532926", "南涧彝族自治县", "532900"],
    ["532927", "巍山彝族回族自治县", "532900"],
    ["532928", "永平县", "532900"],
    ["532929", "云龙县", "532900"],
    ["532930", "洱源县", "532900"],
    ["532931", "剑川县", "532900"],
    ["532932", "鹤庆县", "532900"],
    ["533100", "德宏傣族景颇族自治州", "530000"],
    ["533102", "瑞丽市", "533100"],
    ["533103", "芒市", "533100"],
    ["533122", "梁河县", "533100"],
    ["533123", "盈江县", "533100"],
    ["533124", "陇川县", "533100"],
    ["533300", "怒江傈僳族自治州", "530000"],
    ["533301", "泸水市", "533300"],
    ["533323", "福贡县", "533300"],
    ["533324", "贡山独龙族怒族自治县", "533300"],
    ["533325", "兰坪白族普米族自治县", "533300"],
    ["533400", "迪庆藏族自治州", "530000"],
    ["533401", "香格里拉市", "533400"],
    ["533422", "德钦县", "533400"],
    ["533423", "维西傈僳族自治县", "533400"],
    ["540100", "拉萨市", "540000"],
    ["540102", "城关区", "540100"],
    ["540103", "堆龙德庆区", "540100"],
    ["540104", "达孜区", "540100"],
    ["540121", "林周县", "540100"],
    ["540122", "当雄县", "540100"],
    ["540123", "尼木县", "540100"],
    ["540124", "曲水县", "540100"],
    ["540127", "墨竹工卡县", "540100"],
    ["540200", "日喀则市", "540000"],
    ["540202", "桑珠孜区", "540200"],
    ["540221", "南木林县", "540200"],
    ["540222", "江孜县", "540200"],
    ["540223", "定日县", "540200"],
    ["540224", "萨迦县", "540200"],
    ["540225", "拉孜县", "540200"],
    ["540226", "昂仁县", "540200"],
    ["540227", "谢通门县", "540200"],
    ["540228", "白朗县", "540200"],
    ["540229", "仁布县", "540200"],
    ["540230", "康马县", "540200"],
    ["540231", "定结县", "540200"],
    ["540232", "仲巴县", "540200"],
    ["540233", "亚东县", "540200"],
    ["540234", "吉隆县", "540200"],
    ["540235", "聂拉木县", "540200"],
    ["540236", "萨嘎县", "540200"],
    ["540237", "岗巴县", "540200"],
    ["540300", "昌都市", "540000"],
    ["540302", "卡若区", "540300"],
    ["540321", "江达县", "540300"],
    ["540322", "贡觉县", "540300"],
    ["540323", "类乌齐县", "540300"],
    ["540324", "丁青县", "540300"],
    ["540325", "察雅县", "540300"],
    ["540326", "八宿县", "540300"],
    ["540327", "左贡县", "540300"],
    ["540328", "芒康县", "540300"],
    ["540329", "洛隆县", "540300"],
    ["540330", "边坝县", "540300"],
    ["540400", "林芝市", "540000"],
    ["540402", "巴宜区", "540400"],
    ["540421", "工布江达县", "540400"],
    ["540422", "米林县", "540400"],
    ["540423", "墨脱县", "540400"],
    ["540424", "波密县", "540400"],
    ["540425", "察隅县", "540400"],
    ["540426", "朗县", "540400"],
    ["540500", "山南市", "540000"],
    ["540502", "乃东区", "540500"],
    ["540521", "扎囊县", "540500"],
    ["540522", "贡嘎县", "540500"],
    ["540523", "桑日县", "540500"],
    ["540524", "琼结县", "540500"],
    ["540525", "曲松县", "540500"],
    ["540526", "措美县", "540500"],
    ["540527", "洛扎县", "540500"],
    ["540528", "加查县", "540500"],
    ["540529", "隆子县", "540500"],
    ["540530", "错那县", "540500"],
    ["540531", "浪卡子县", "540500"],
    ["540600", "那曲市", "540000"],
    ["540602", "色尼区", "540600"],
    ["540621", "嘉黎县", "540600"],
    ["540622", "比如县", "540600"],
    ["540623", "聂荣县", "540600"],
    ["540624", "安多县", "540600"],
    ["540625", "申扎县", "540600"],
    ["540626", "索县", "540600"],
    ["540627", "班戈县", "540600"],
    ["540628", "巴青县", "540600"],
    ["540629", "尼玛县", "540600"],
    ["540630", "双湖县", "540600"],
    ["542500", "阿里地区", "540000"],
    ["542521", "普兰县", "542500"],
    ["542522", "札达县", "542500"],
    ["542523", "噶尔县", "542500"],
    ["542524", "日土县", "542500"],
    ["542525", "革吉县", "542500"],
    ["542526", "改则县", "542500"],
    ["542527", "措勤县", "542500"],
    ["610100", "西安市", "610000"],
    ["610102", "新城区", "610100"],
    ["610103", "碑林区", "610100"],
    ["610104", "莲湖区", "610100"],
    ["610111", "灞桥区", "610100"],
    ["610112", "未央区", "610100"],
    ["610113", "雁塔区", "610100"],
    ["610114", "阎良区", "610100"],
    ["610115", "临潼区", "610100"],
    ["610116", "长安区", "610100"],
    ["610117", "高陵区", "610100"],
    ["610118", "鄠邑区", "610100"],
    ["610122", "蓝田县", "610100"],
    ["610124", "周至县", "610100"],
    ["610200", "铜川市", "610000"],
    ["610202", "王益区", "610200"],
    ["610203", "印台区", "610200"],
    ["610204", "耀州区", "610200"],
    ["610222", "宜君县", "610200"],
    ["610300", "宝鸡市", "610000"],
    ["610302", "渭滨区", "610300"],
    ["610303", "金台区", "610300"],
    ["610304", "陈仓区", "610300"],
    ["610322", "凤翔县", "610300"],
    ["610323", "岐山县", "610300"],
    ["610324", "扶风县", "610300"],
    ["610326", "眉县", "610300"],
    ["610327", "陇县", "610300"],
    ["610328", "千阳县", "610300"],
    ["610329", "麟游县", "610300"],
    ["610330", "凤县", "610300"],
    ["610331", "太白县", "610300"],
    ["610400", "咸阳市", "610000"],
    ["610402", "秦都区", "610400"],
    ["610403", "杨陵区", "610400"],
    ["610404", "渭城区", "610400"],
    ["610422", "三原县", "610400"],
    ["610423", "泾阳县", "610400"],
    ["610424", "乾县", "610400"],
    ["610425", "礼泉县", "610400"],
    ["610426", "永寿县", "610400"],
    ["610428", "长武县", "610400"],
    ["610429", "旬邑县", "610400"],
    ["610430", "淳化县", "610400"],
    ["610431", "武功县", "610400"],
    ["610481", "兴平市", "610400"],
    ["610482", "彬州市", "610400"],
    ["610500", "渭南市", "610000"],
    ["610502", "临渭区", "610500"],
    ["610503", "华州区", "610500"],
    ["610522", "潼关县", "610500"],
    ["610523", "大荔县", "610500"],
    ["610524", "合阳县", "610500"],
    ["610525", "澄城县", "610500"],
    ["610526", "蒲城县", "610500"],
    ["610527", "白水县", "610500"],
    ["610528", "富平县", "610500"],
    ["610581", "韩城市", "610500"],
    ["610582", "华阴市", "610500"],
    ["610600", "延安市", "610000"],
    ["610602", "宝塔区", "610600"],
    ["610603", "安塞区", "610600"],
    ["610621", "延长县", "610600"],
    ["610622", "延川县", "610600"],
    ["610625", "志丹县", "610600"],
    ["610626", "吴起县", "610600"],
    ["610627", "甘泉县", "610600"],
    ["610628", "富县", "610600"],
    ["610629", "洛川县", "610600"],
    ["610630", "宜川县", "610600"],
    ["610631", "黄龙县", "610600"],
    ["610632", "黄陵县", "610600"],
    ["610681", "子长市", "610600"],
    ["610700", "汉中市", "610000"],
    ["610702", "汉台区", "610700"],
    ["610703", "南郑区", "610700"],
    ["610722", "城固县", "610700"],
    ["610723", "洋县", "610700"],
    ["610724", "西乡县", "610700"],
    ["610725", "勉县", "610700"],
    ["610726", "宁强县", "610700"],
    ["610727", "略阳县", "610700"],
    ["610728", "镇巴县", "610700"],
    ["610729", "留坝县", "610700"],
    ["610730", "佛坪县", "610700"],
    ["610800", "榆林市", "610000"],
    ["610802", "榆阳区", "610800"],
    ["610803", "横山区", "610800"],
    ["610822", "府谷县", "610800"],
    ["610824", "靖边县", "610800"],
    ["610825", "定边县", "610800"],
    ["610826", "绥德县", "610800"],
    ["610827", "米脂县", "610800"],
    ["610828", "佳县", "610800"],
    ["610829", "吴堡县", "610800"],
    ["610830", "清涧县", "610800"],
    ["610831", "子洲县", "610800"],
    ["610881", "神木市", "610800"],
    ["610900", "安康市", "610000"],
    ["610902", "汉滨区", "610900"],
    ["610921", "汉阴县", "610900"],
    ["610922", "石泉县", "610900"],
    ["610923", "宁陕县", "610900"],
    ["610924", "紫阳县", "610900"],
    ["610925", "岚皋县", "610900"],
    ["610926", "平利县", "610900"],
    ["610927", "镇坪县", "610900"],
    ["610928", "旬阳县", "610900"],
    ["610929", "白河县", "610900"],
    ["611000", "商洛市", "610000"],
    ["611002", "商州区", "611000"],
    ["611021", "洛南县", "611000"],
    ["611022", "丹凤县", "611000"],
    ["611023", "商南县", "611000"],
    ["611024", "山阳县", "611000"],
    ["611025", "镇安县", "611000"],
    ["611026", "柞水县", "611000"],
    ["620100", "兰州市", "620000"],
    ["620102", "城关区", "620100"],
    ["620103", "七里河区", "620100"],
    ["620104", "西固区", "620100"],
    ["620105", "安宁区", "620100"],
    ["620111", "红古区", "620100"],
    ["620121", "永登县", "620100"],
    ["620122", "皋兰县", "620100"],
    ["620123", "榆中县", "620100"],
    ["620200", "嘉峪关市", "620000"],
    ["620201", "雄关区", "620200"],
    ["620202", "长城区", "620200"],
    ["620203", "镜铁区", "620200"],
    ["620300", "金昌市", "620000"],
    ["620302", "金川区", "620300"],
    ["620321", "永昌县", "620300"],
    ["620400", "白银市", "620000"],
    ["620402", "白银区", "620400"],
    ["620403", "平川区", "620400"],
    ["620421", "靖远县", "620400"],
    ["620422", "会宁县", "620400"],
    ["620423", "景泰县", "620400"],
    ["620500", "天水市", "620000"],
    ["620502", "秦州区", "620500"],
    ["620503", "麦积区", "620500"],
    ["620521", "清水县", "620500"],
    ["620522", "秦安县", "620500"],
    ["620523", "甘谷县", "620500"],
    ["620524", "武山县", "620500"],
    ["620525", "张家川回族自治县", "620500"],
    ["620600", "武威市", "620000"],
    ["620602", "凉州区", "620600"],
    ["620621", "民勤县", "620600"],
    ["620622", "古浪县", "620600"],
    ["620623", "天祝藏族自治县", "620600"],
    ["620700", "张掖市", "620000"],
    ["620702", "甘州区", "620700"],
    ["620721", "肃南裕固族自治县", "620700"],
    ["620722", "民乐县", "620700"],
    ["620723", "临泽县", "620700"],
    ["620724", "高台县", "620700"],
    ["620725", "山丹县", "620700"],
    ["620800", "平凉市", "620000"],
    ["620802", "崆峒区", "620800"],
    ["620821", "泾川县", "620800"],
    ["620822", "灵台县", "620800"],
    ["620823", "崇信县", "620800"],
    ["620825", "庄浪县", "620800"],
    ["620826", "静宁县", "620800"],
    ["620881", "华亭市", "620800"],
    ["620900", "酒泉市", "620000"],
    ["620902", "肃州区", "620900"],
    ["620921", "金塔县", "620900"],
    ["620922", "瓜州县", "620900"],
    ["620923", "肃北蒙古族自治县", "620900"],
    ["620924", "阿克塞哈萨克族自治县", "620900"],
    ["620981", "玉门市", "620900"],
    ["620982", "敦煌市", "620900"],
    ["621000", "庆阳市", "620000"],
    ["621002", "西峰区", "621000"],
    ["621021", "庆城县", "621000"],
    ["621022", "环县", "621000"],
    ["621023", "华池县", "621000"],
    ["621024", "合水县", "621000"],
    ["621025", "正宁县", "621000"],
    ["621026", "宁县", "621000"],
    ["621027", "镇原县", "621000"],
    ["621100", "定西市", "620000"],
    ["621102", "安定区", "621100"],
    ["621121", "通渭县", "621100"],
    ["621122", "陇西县", "621100"],
    ["621123", "渭源县", "621100"],
    ["621124", "临洮县", "621100"],
    ["621125", "漳县", "621100"],
    ["621126", "岷县", "621100"],
    ["621200", "陇南市", "620000"],
    ["621202", "武都区", "621200"],
    ["621221", "成县", "621200"],
    ["621222", "文县", "621200"],
    ["621223", "宕昌县", "621200"],
    ["621224", "康县", "621200"],
    ["621225", "西和县", "621200"],
    ["621226", "礼县", "621200"],
    ["621227", "徽县", "621200"],
    ["621228", "两当县", "621200"],
    ["622900", "临夏回族自治州", "620000"],
    ["622901", "临夏市", "622900"],
    ["622921", "临夏县", "622900"],
    ["622922", "康乐县", "622900"],
    ["622923", "永靖县", "622900"],
    ["622924", "广河县", "622900"],
    ["622925", "和政县", "622900"],
    ["622926", "东乡族自治县", "622900"],
    ["622927", "积石山保安族东乡族撒拉族自治县", "622900"],
    ["623000", "甘南藏族自治州", "620000"],
    ["623001", "合作市", "623000"],
    ["623021", "临潭县", "623000"],
    ["623022", "卓尼县", "623000"],
    ["623023", "舟曲县", "623000"],
    ["623024", "迭部县", "623000"],
    ["623025", "玛曲县", "623000"],
    ["623026", "碌曲县", "623000"],
    ["623027", "夏河县", "623000"],
    ["630100", "西宁市", "630000"],
    ["630102", "城东区", "630100"],
    ["630103", "城中区", "630100"],
    ["630104", "城西区", "630100"],
    ["630105", "城北区", "630100"],
    ["630106", "湟中区", "630100"],
    ["630121", "大通回族土族自治县", "630100"],
    ["630123", "湟源县", "630100"],
    ["630200", "海东市", "630000"],
    ["630202", "乐都区", "630200"],
    ["630203", "平安区", "630200"],
    ["630222", "民和回族土族自治县", "630200"],
    ["630223", "互助土族自治县", "630200"],
    ["630224", "化隆回族自治县", "630200"],
    ["630225", "循化撒拉族自治县", "630200"],
    ["632200", "海北藏族自治州", "630000"],
    ["632221", "门源回族自治县", "632200"],
    ["632222", "祁连县", "632200"],
    ["632223", "海晏县", "632200"],
    ["632224", "刚察县", "632200"],
    ["632300", "黄南藏族自治州", "630000"],
    ["632321", "同仁县", "632300"],
    ["632322", "尖扎县", "632300"],
    ["632323", "泽库县", "632300"],
    ["632324", "河南蒙古族自治县", "632300"],
    ["632500", "海南藏族自治州", "630000"],
    ["632521", "共和县", "632500"],
    ["632522", "同德县", "632500"],
    ["632523", "贵德县", "632500"],
    ["632524", "兴海县", "632500"],
    ["632525", "贵南县", "632500"],
    ["632600", "果洛藏族自治州", "630000"],
    ["632621", "玛沁县", "632600"],
    ["632622", "班玛县", "632600"],
    ["632623", "甘德县", "632600"],
    ["632624", "达日县", "632600"],
    ["632625", "久治县", "632600"],
    ["632626", "玛多县", "632600"],
    ["632700", "玉树藏族自治州", "630000"],
    ["632701", "玉树市", "632700"],
    ["632722", "杂多县", "632700"],
    ["632723", "称多县", "632700"],
    ["632724", "治多县", "632700"],
    ["632725", "囊谦县", "632700"],
    ["632726", "曲麻莱县", "632700"],
    ["632800", "海西蒙古族藏族自治州", "630000"],
    ["632801", "格尔木市", "632800"],
    ["632802", "德令哈市", "632800"],
    ["632803", "茫崖市", "632800"],
    ["632821", "乌兰县", "632800"],
    ["632822", "都兰县", "632800"],
    ["632823", "天峻县", "632800"],
    ["640100", "银川市", "640000"],
    ["640104", "兴庆区", "640100"],
    ["640105", "西夏区", "640100"],
    ["640106", "金凤区", "640100"],
    ["640121", "永宁县", "640100"],
    ["640122", "贺兰县", "640100"],
    ["640181", "灵武市", "640100"],
    ["640200", "石嘴山市", "640000"],
    ["640202", "大武口区", "640200"],
    ["640205", "惠农区", "640200"],
    ["640221", "平罗县", "640200"],
    ["640300", "吴忠市", "640000"],
    ["640302", "利通区", "640300"],
    ["640303", "红寺堡区", "640300"],
    ["640323", "盐池县", "640300"],
    ["640324", "同心县", "640300"],
    ["640381", "青铜峡市", "640300"],
    ["640400", "固原市", "640000"],
    ["640402", "原州区", "640400"],
    ["640422", "西吉县", "640400"],
    ["640423", "隆德县", "640400"],
    ["640424", "泾源县", "640400"],
    ["640425", "彭阳县", "640400"],
    ["640500", "中卫市", "640000"],
    ["640502", "沙坡头区", "640500"],
    ["640521", "中宁县", "640500"],
    ["640522", "海原县", "640500"],
    ["650100", "乌鲁木齐市", "650000"],
    ["650102", "天山区", "650100"],
    ["650103", "沙依巴克区", "650100"],
    ["650104", "新市区", "650100"],
    ["650105", "水磨沟区", "650100"],
    ["650106", "头屯河区", "650100"],
    ["650107", "达坂城区", "650100"],
    ["650109", "米东区", "650100"],
    ["650121", "乌鲁木齐县", "650100"],
    ["650200", "克拉玛依市", "650000"],
    ["650202", "独山子区", "650200"],
    ["650203", "克拉玛依区", "650200"],
    ["650204", "白碱滩区", "650200"],
    ["650205", "乌尔禾区", "650200"],
    ["650400", "吐鲁番市", "650000"],
    ["650402", "高昌区", "650400"],
    ["650421", "鄯善县", "650400"],
    ["650422", "托克逊县", "650400"],
    ["650500", "哈密市", "650000"],
    ["650502", "伊州区", "650500"],
    ["650521", "巴里坤哈萨克自治县", "650500"],
    ["650522", "伊吾县", "650500"],
    ["652300", "昌吉回族自治州", "650000"],
    ["652301", "昌吉市", "652300"],
    ["652302", "阜康市", "652300"],
    ["652323", "呼图壁县", "652300"],
    ["652324", "玛纳斯县", "652300"],
    ["652325", "奇台县", "652300"],
    ["652327", "吉木萨尔县", "652300"],
    ["652328", "木垒哈萨克自治县", "652300"],
    ["652700", "博尔塔拉蒙古自治州", "650000"],
    ["652701", "博乐市", "652700"],
    ["652702", "阿拉山口市", "652700"],
    ["652722", "精河县", "652700"],
    ["652723", "温泉县", "652700"],
    ["652800", "巴音郭楞蒙古自治州", "650000"],
    ["652801", "库尔勒市", "652800"],
    ["652822", "轮台县", "652800"],
    ["652823", "尉犁县", "652800"],
    ["652824", "若羌县", "652800"],
    ["652825", "且末县", "652800"],
    ["652826", "焉耆回族自治县", "652800"],
    ["652827", "和静县", "652800"],
    ["652828", "和硕县", "652800"],
    ["652829", "博湖县", "652800"],
    ["652900", "阿克苏地区", "650000"],
    ["652901", "阿克苏市", "652900"],
    ["652902", "库车市", "652900"],
    ["652922", "温宿县", "652900"],
    ["652924", "沙雅县", "652900"],
    ["652925", "新和县", "652900"],
    ["652926", "拜城县", "652900"],
    ["652927", "乌什县", "652900"],
    ["652928", "阿瓦提县", "652900"],
    ["652929", "柯坪县", "652900"],
    ["653000", "克孜勒苏柯尔克孜自治州", "650000"],
    ["653001", "阿图什市", "653000"],
    ["653022", "阿克陶县", "653000"],
    ["653023", "阿合奇县", "653000"],
    ["653024", "乌恰县", "653000"],
    ["653100", "喀什地区", "650000"],
    ["653101", "喀什市", "653100"],
    ["653121", "疏附县", "653100"],
    ["653122", "疏勒县", "653100"],
    ["653123", "英吉沙县", "653100"],
    ["653124", "泽普县", "653100"],
    ["653125", "莎车县", "653100"],
    ["653126", "叶城县", "653100"],
    ["653127", "麦盖提县", "653100"],
    ["653128", "岳普湖县", "653100"],
    ["653129", "伽师县", "653100"],
    ["653130", "巴楚县", "653100"],
    ["653131", "塔什库尔干塔吉克自治县", "653100"],
    ["653200", "和田地区", "650000"],
    ["653201", "和田市", "653200"],
    ["653221", "和田县", "653200"],
    ["653222", "墨玉县", "653200"],
    ["653223", "皮山县", "653200"],
    ["653224", "洛浦县", "653200"],
    ["653225", "策勒县", "653200"],
    ["653226", "于田县", "653200"],
    ["653227", "民丰县", "653200"],
    ["654000", "伊犁哈萨克自治州", "650000"],
    ["654002", "伊宁市", "654000"],
    ["654003", "奎屯市", "654000"],
    ["654004", "霍尔果斯市", "654000"],
    ["654021", "伊宁县", "654000"],
    ["654022", "察布查尔锡伯自治县", "654000"],
    ["654023", "霍城县", "654000"],
    ["654024", "巩留县", "654000"],
    ["654025", "新源县", "654000"],
    ["654026", "昭苏县", "654000"],
    ["654027", "特克斯县", "654000"],
    ["654028", "尼勒克县", "654000"],
    ["654200", "塔城地区", "650000"],
    ["654201", "塔城市", "654200"],
    ["654202", "乌苏市", "654200"],
    ["654221", "额敏县", "654200"],
    ["654223", "沙湾县", "654200"],
    ["654224", "托里县", "654200"],
    ["654225", "裕民县", "654200"],
    ["654226", "和布克赛尔蒙古自治县", "654200"],
    ["654300", "阿勒泰地区", "650000"],
    ["654301", "阿勒泰市", "654300"],
    ["654321", "布尔津县", "654300"],
    ["654322", "富蕴县", "654300"],
    ["654323", "福海县", "654300"],
    ["654324", "哈巴河县", "654300"],
    ["654325", "青河县", "654300"],
    ["654326", "吉木乃县", "654300"],
    ["659001", "石河子市", "650000"],
    ["659084", "石河子市", "659001"],
    ["659002", "阿拉尔市", "650000"],
    ["659083", "阿拉尔市", "659002"],
    ["659003", "图木舒克市", "650000"],
    ["659082", "图木舒克市", "659003"],
    ["659004", "五家渠市", "650000"],
    ["659081", "五家渠市", "659004"],
    ["659005", "北屯市", "650000"],
    ["659080", "北屯市", "659005"],
    ["659006", "铁门关市", "650000"],
    ["659079", "铁门关市", "659006"],
    ["659007", "双河市", "650000"],
    ["659078", "双河市", "659007"],
    ["659008", "可克达拉市", "650000"],
    ["659077", "可克达拉市", "659008"],
    ["659009", "昆玉市", "650000"],
    ["659076", "昆玉市", "659009"],
    ["659010", "胡杨河市", "650000"],
    ["659099", "胡杨河市", "659010"],
    ["710100", "台北市", "710000"],
    ["710101", "松山区", "710100"],
    ["710102", "信义区", "710100"],
    ["710103", "大安区", "710100"],
    ["710104", "中山区", "710100"],
    ["710105", "中正区", "710100"],
    ["710106", "大同区", "710100"],
    ["710107", "万华区", "710100"],
    ["710108", "文山区", "710100"],
    ["710109", "南港区", "710100"],
    ["710110", "内湖区", "710100"],
    ["710111", "士林区", "710100"],
    ["710112", "北投区", "710100"],
    ["710200", "高雄市", "710000"],
    ["710201", "盐埕区", "710200"],
    ["710202", "鼓山区", "710200"],
    ["710203", "左营区", "710200"],
    ["710204", "楠梓区", "710200"],
    ["710205", "三民区", "710200"],
    ["710206", "新兴区", "710200"],
    ["710207", "前金区", "710200"],
    ["710208", "苓雅区", "710200"],
    ["710209", "前镇区", "710200"],
    ["710210", "旗津区", "710200"],
    ["710211", "小港区", "710200"],
    ["710212", "凤山区", "710200"],
    ["710213", "林园区", "710200"],
    ["710214", "大寮区", "710200"],
    ["710215", "大树区", "710200"],
    ["710216", "大社区", "710200"],
    ["710217", "仁武区", "710200"],
    ["710218", "鸟松区", "710200"],
    ["710219", "冈山区", "710200"],
    ["710220", "桥头区", "710200"],
    ["710221", "燕巢区", "710200"],
    ["710222", "田寮区", "710200"],
    ["710223", "阿莲区", "710200"],
    ["710224", "路竹区", "710200"],
    ["710225", "湖内区", "710200"],
    ["710226", "茄萣区", "710200"],
    ["710227", "永安区", "710200"],
    ["710228", "弥陀区", "710200"],
    ["710229", "梓官区", "710200"],
    ["710230", "旗山区", "710200"],
    ["710231", "美浓区", "710200"],
    ["710232", "六龟区", "710200"],
    ["710233", "甲仙区", "710200"],
    ["710234", "杉林区", "710200"],
    ["710235", "内门区", "710200"],
    ["710236", "茂林区", "710200"],
    ["710237", "桃源区", "710200"],
    ["710238", "那玛夏区", "710200"],
    ["710300", "基隆市", "710000"],
    ["710301", "中正区", "710300"],
    ["710302", "七堵区", "710300"],
    ["710303", "暖暖区", "710300"],
    ["710304", "仁爱区", "710300"],
    ["710305", "中山区", "710300"],
    ["710306", "安乐区", "710300"],
    ["710307", "信义区", "710300"],
    ["710400", "台中市", "710000"],
    ["710401", "中区", "710400"],
    ["710402", "东区", "710400"],
    ["710403", "南区", "710400"],
    ["710404", "西区", "710400"],
    ["710405", "北区", "710400"],
    ["710406", "西屯区", "710400"],
    ["710407", "南屯区", "710400"],
    ["710408", "北屯区", "710400"],
    ["710409", "丰原区", "710400"],
    ["710410", "东势区", "710400"],
    ["710411", "大甲区", "710400"],
    ["710412", "清水区", "710400"],
    ["710413", "沙鹿区", "710400"],
    ["710414", "梧栖区", "710400"],
    ["710415", "后里区", "710400"],
    ["710416", "神冈区", "710400"],
    ["710417", "潭子区", "710400"],
    ["710418", "大雅区", "710400"],
    ["710419", "新社区", "710400"],
    ["710420", "石冈区", "710400"],
    ["710421", "外埔区", "710400"],
    ["710422", "大安区", "710400"],
    ["710423", "乌日区", "710400"],
    ["710424", "大肚区", "710400"],
    ["710425", "龙井区", "710400"],
    ["710426", "雾峰区", "710400"],
    ["710427", "太平区", "710400"],
    ["710428", "大里区", "710400"],
    ["710429", "和平区", "710400"],
    ["710500", "台南市", "710000"],
    ["710501", "东区", "710500"],
    ["710502", "南区", "710500"],
    ["710504", "北区", "710500"],
    ["710506", "安南区", "710500"],
    ["710507", "安平区", "710500"],
    ["710508", "中西区", "710500"],
    ["710509", "新营区", "710500"],
    ["710510", "盐水区", "710500"],
    ["710511", "白河区", "710500"],
    ["710512", "柳营区", "710500"],
    ["710513", "后壁区", "710500"],
    ["710514", "东山区", "710500"],
    ["710515", "麻豆区", "710500"],
    ["710516", "下营区", "710500"],
    ["710517", "六甲区", "710500"],
    ["710518", "官田区", "710500"],
    ["710519", "大内区", "710500"],
    ["710520", "佳里区", "710500"],
    ["710521", "学甲区", "710500"],
    ["710522", "西港区", "710500"],
    ["710523", "七股区", "710500"],
    ["710524", "将军区", "710500"],
    ["710525", "北门区", "710500"],
    ["710526", "新化区", "710500"],
    ["710527", "善化区", "710500"],
    ["710528", "新市区", "710500"],
    ["710529", "安定区", "710500"],
    ["710530", "山上区", "710500"],
    ["710531", "玉井区", "710500"],
    ["710532", "楠西区", "710500"],
    ["710533", "南化区", "710500"],
    ["710534", "左镇区", "710500"],
    ["710535", "仁德区", "710500"],
    ["710536", "归仁区", "710500"],
    ["710537", "关庙区", "710500"],
    ["710538", "龙崎区", "710500"],
    ["710539", "永康区", "710500"],
    ["710600", "新竹市", "710000"],
    ["710601", "东区", "710600"],
    ["710602", "北区", "710600"],
    ["710603", "香山区", "710600"],
    ["710700", "嘉义市", "710000"],
    ["710701", "东区", "710700"],
    ["710702", "西区", "710700"],
    ["710800", "新北市", "710000"],
    ["710801", "板桥区", "710800"],
    ["710802", "三重区", "710800"],
    ["710803", "中和区", "710800"],
    ["710804", "永和区", "710800"],
    ["710805", "新庄区", "710800"],
    ["710806", "新店区", "710800"],
    ["710807", "树林区", "710800"],
    ["710808", "莺歌区", "710800"],
    ["710809", "三峡区", "710800"],
    ["710810", "淡水区", "710800"],
    ["710811", "汐止区", "710800"],
    ["710812", "瑞芳区", "710800"],
    ["710813", "土城区", "710800"],
    ["710814", "芦洲区", "710800"],
    ["710815", "五股区", "710800"],
    ["710816", "泰山区", "710800"],
    ["710817", "林口区", "710800"],
    ["710818", "深坑区", "710800"],
    ["710819", "石碇区", "710800"],
    ["710820", "坪林区", "710800"],
    ["710821", "三芝区", "710800"],
    ["710822", "石门区", "710800"],
    ["710823", "八里区", "710800"],
    ["710824", "平溪区", "710800"],
    ["710825", "双溪区", "710800"],
    ["710826", "贡寮区", "710800"],
    ["710827", "金山区", "710800"],
    ["710828", "万里区", "710800"],
    ["710829", "乌来区", "710800"],
    ["712200", "宜兰县", "710000"],
    ["712201", "宜兰市", "712200"],
    ["712221", "罗东镇", "712200"],
    ["712222", "苏澳镇", "712200"],
    ["712223", "头城镇", "712200"],
    ["712224", "礁溪乡", "712200"],
    ["712225", "壮围乡", "712200"],
    ["712226", "员山乡", "712200"],
    ["712227", "冬山乡", "712200"],
    ["712228", "五结乡", "712200"],
    ["712229", "三星乡", "712200"],
    ["712230", "大同乡", "712200"],
    ["712231", "南澳乡", "712200"],
    ["712300", "桃园市", "710000"],
    ["712301", "桃园市", "712300"],
    ["712302", "中坜市", "712300"],
    ["712303", "平镇市", "712300"],
    ["712304", "八德市", "712300"],
    ["712305", "杨梅市", "712300"],
    ["712306", "芦竹市", "712300"],
    ["712321", "大溪镇", "712300"],
    ["712324", "大园乡", "712300"],
    ["712325", "龟山乡", "712300"],
    ["712327", "龙潭乡", "712300"],
    ["712329", "新屋乡", "712300"],
    ["712330", "观音乡", "712300"],
    ["712331", "复兴乡", "712300"],
    ["712400", "新竹县", "710000"],
    ["712401", "竹北市", "712400"],
    ["712421", "竹东镇", "712400"],
    ["712422", "新埔镇", "712400"],
    ["712423", "关西镇", "712400"],
    ["712424", "湖口乡", "712400"],
    ["712425", "新丰乡", "712400"],
    ["712426", "芎林乡", "712400"],
    ["712427", "横山乡", "712400"],
    ["712428", "北埔乡", "712400"],
    ["712429", "宝山乡", "712400"],
    ["712430", "峨眉乡", "712400"],
    ["712431", "尖石乡", "712400"],
    ["712432", "五峰乡", "712400"],
    ["712500", "苗栗县", "710000"],
    ["712501", "苗栗市", "712500"],
    ["712521", "苑里镇", "712500"],
    ["712522", "通霄镇", "712500"],
    ["712523", "竹南镇", "712500"],
    ["712524", "头份市", "712500"],
    ["712525", "后龙镇", "712500"],
    ["712526", "卓兰镇", "712500"],
    ["712527", "大湖乡", "712500"],
    ["712528", "公馆乡", "712500"],
    ["712529", "铜锣乡", "712500"],
    ["712530", "南庄乡", "712500"],
    ["712531", "头屋乡", "712500"],
    ["712532", "三义乡", "712500"],
    ["712533", "西湖乡", "712500"],
    ["712534", "造桥乡", "712500"],
    ["712535", "三湾乡", "712500"],
    ["712536", "狮潭乡", "712500"],
    ["712537", "泰安乡", "712500"],
    ["712700", "彰化县", "710000"],
    ["712701", "彰化市", "712700"],
    ["712721", "鹿港镇", "712700"],
    ["712722", "和美镇", "712700"],
    ["712723", "线西乡", "712700"],
    ["712724", "伸港乡", "712700"],
    ["712725", "福兴乡", "712700"],
    ["712726", "秀水乡", "712700"],
    ["712727", "花坛乡", "712700"],
    ["712728", "芬园乡", "712700"],
    ["712729", "员林市", "712700"],
    ["712730", "溪湖镇", "712700"],
    ["712731", "田中镇", "712700"],
    ["712732", "大村乡", "712700"],
    ["712733", "埔盐乡", "712700"],
    ["712734", "埔心乡", "712700"],
    ["712735", "永靖乡", "712700"],
    ["712736", "社头乡", "712700"],
    ["712737", "二水乡", "712700"],
    ["712738", "北斗镇", "712700"],
    ["712739", "二林镇", "712700"],
    ["712740", "田尾乡", "712700"],
    ["712741", "埤头乡", "712700"],
    ["712742", "芳苑乡", "712700"],
    ["712743", "大城乡", "712700"],
    ["712744", "竹塘乡", "712700"],
    ["712745", "溪州乡", "712700"],
    ["712800", "南投县", "710000"],
    ["712801", "南投市", "712800"],
    ["712821", "埔里镇", "712800"],
    ["712822", "草屯镇", "712800"],
    ["712823", "竹山镇", "712800"],
    ["712824", "集集镇", "712800"],
    ["712825", "名间乡", "712800"],
    ["712826", "鹿谷乡", "712800"],
    ["712827", "中寮乡", "712800"],
    ["712828", "鱼池乡", "712800"],
    ["712829", "国姓乡", "712800"],
    ["712830", "水里乡", "712800"],
    ["712831", "信义乡", "712800"],
    ["712832", "仁爱乡", "712800"],
    ["712900", "云林县", "710000"],
    ["712901", "斗六市", "712900"],
    ["712921", "斗南镇", "712900"],
    ["712922", "虎尾镇", "712900"],
    ["712923", "西螺镇", "712900"],
    ["712924", "土库镇", "712900"],
    ["712925", "北港镇", "712900"],
    ["712926", "古坑乡", "712900"],
    ["712927", "大埤乡", "712900"],
    ["712928", "莿桐乡", "712900"],
    ["712929", "林内乡", "712900"],
    ["712930", "二仑乡", "712900"],
    ["712931", "仑背乡", "712900"],
    ["712932", "麦寮乡", "712900"],
    ["712933", "东势乡", "712900"],
    ["712934", "褒忠乡", "712900"],
    ["712935", "台西乡", "712900"],
    ["712936", "元长乡", "712900"],
    ["712937", "四湖乡", "712900"],
    ["712938", "口湖乡", "712900"],
    ["712939", "水林乡", "712900"],
    ["713000", "嘉义县", "710000"],
    ["713001", "太保市", "713000"],
    ["713002", "朴子市", "713000"],
    ["713023", "布袋镇", "713000"],
    ["713024", "大林镇", "713000"],
    ["713025", "民雄乡", "713000"],
    ["713026", "溪口乡", "713000"],
    ["713027", "新港乡", "713000"],
    ["713028", "六脚乡", "713000"],
    ["713029", "东石乡", "713000"],
    ["713030", "义竹乡", "713000"],
    ["713031", "鹿草乡", "713000"],
    ["713032", "水上乡", "713000"],
    ["713033", "中埔乡", "713000"],
    ["713034", "竹崎乡", "713000"],
    ["713035", "梅山乡", "713000"],
    ["713036", "番路乡", "713000"],
    ["713037", "大埔乡", "713000"],
    ["713038", "阿里山乡", "713000"],
    ["713300", "屏东县", "710000"],
    ["713301", "屏东市", "713300"],
    ["713321", "潮州镇", "713300"],
    ["713322", "东港镇", "713300"],
    ["713323", "恒春镇", "713300"],
    ["713324", "万丹乡", "713300"],
    ["713325", "长治乡", "713300"],
    ["713326", "麟洛乡", "713300"],
    ["713327", "九如乡", "713300"],
    ["713328", "里港乡", "713300"],
    ["713329", "盐埔乡", "713300"],
    ["713330", "高树乡", "713300"],
    ["713331", "万峦乡", "713300"],
    ["713332", "内埔乡", "713300"],
    ["713333", "竹田乡", "713300"],
    ["713334", "新埤乡", "713300"],
    ["713335", "枋寮乡", "713300"],
    ["713336", "新园乡", "713300"],
    ["713337", "崁顶乡", "713300"],
    ["713338", "林边乡", "713300"],
    ["713339", "南州乡", "713300"],
    ["713340", "佳冬乡", "713300"],
    ["713341", "琉球乡", "713300"],
    ["713342", "车城乡", "713300"],
    ["713343", "满州乡", "713300"],
    ["713344", "枋山乡", "713300"],
    ["713345", "三地门乡", "713300"],
    ["713346", "雾台乡", "713300"],
    ["713347", "玛家乡", "713300"],
    ["713348", "泰武乡", "713300"],
    ["713349", "来义乡", "713300"],
    ["713350", "春日乡", "713300"],
    ["713351", "狮子乡", "713300"],
    ["713352", "牡丹乡", "713300"],
    ["713400", "台东县", "710000"],
    ["713401", "台东市", "713400"],
    ["713421", "成功镇", "713400"],
    ["713422", "关山镇", "713400"],
    ["713423", "卑南乡", "713400"],
    ["713424", "鹿野乡", "713400"],
    ["713425", "池上乡", "713400"],
    ["713426", "东河乡", "713400"],
    ["713427", "长滨乡", "713400"],
    ["713428", "太麻里乡", "713400"],
    ["713429", "大武乡", "713400"],
    ["713430", "绿岛乡", "713400"],
    ["713431", "海端乡", "713400"],
    ["713432", "延平乡", "713400"],
    ["713433", "金峰乡", "713400"],
    ["713434", "达仁乡", "713400"],
    ["713435", "兰屿乡", "713400"],
    ["713500", "花莲县", "710000"],
    ["713501", "花莲市", "713500"],
    ["713521", "凤林镇", "713500"],
    ["713522", "玉里镇", "713500"],
    ["713523", "新城乡", "713500"],
    ["713524", "吉安乡", "713500"],
    ["713525", "寿丰乡", "713500"],
    ["713526", "光复乡", "713500"],
    ["713527", "丰滨乡", "713500"],
    ["713528", "瑞穗乡", "713500"],
    ["713529", "富里乡", "713500"],
    ["713530", "秀林乡", "713500"],
    ["713531", "万荣乡", "713500"],
    ["713532", "卓溪乡", "713500"],
    ["713600", "澎湖县", "710000"],
    ["713601", "马公市", "713600"],
    ["713621", "湖西乡", "713600"],
    ["713622", "白沙乡", "713600"],
    ["713623", "西屿乡", "713600"],
    ["713624", "望安乡", "713600"],
    ["713625", "七美乡", "713600"],
    ["713700", "金门县", "710000"],
    ["713701", "金城镇", "713700"],
    ["713702", "金湖镇", "713700"],
    ["713703", "金沙镇", "713700"],
    ["713704", "金宁乡", "713700"],
    ["713705", "烈屿乡", "713700"],
    ["713706", "乌丘乡", "713700"],
    ["713800", "连江县", "710000"],
    ["713801", "南竿乡", "713800"],
    ["713802", "北竿乡", "713800"],
    ["713803", "莒光乡", "713800"],
    ["713804", "东引乡", "713800"],
    ["810100", "香港岛", "810000"],
    ["810101", "中西区", "810100"],
    ["810102", "湾仔区", "810100"],
    ["810103", "东区", "810100"],
    ["810104", "南区", "810100"],
    ["810200", "九龙", "810000"],
    ["810201", "油尖旺区", "810200"],
    ["810202", "深水埗区", "810200"],
    ["810203", "九龙城区", "810200"],
    ["810204", "黄大仙区", "810200"],
    ["810205", "观塘区", "810200"],
    ["810300", "新界", "810000"],
    ["810301", "荃湾区", "810300"],
    ["810302", "屯门区", "810300"],
    ["810303", "元朗区", "810300"],
    ["810304", "北区", "810300"],
    ["810305", "大埔区", "810300"],
    ["810306", "西贡区", "810300"],
    ["810307", "沙田区", "810300"],
    ["810308", "葵青区", "810300"],
    ["810309", "离岛区", "810300"],
    ["820100", "澳门半岛", "820000"],
    ["820101", "花地玛堂区", "820100"],
    ["820102", "圣安多尼堂区", "820100"],
    ["820103", "大堂区", "820100"],
    ["820104", "望德堂区", "820100"],
    ["820105", "风顺堂区", "820100"],
    ["820200", "氹仔岛", "820000"],
    ["820201", "嘉模堂区", "820200"],
    ["820300", "路环岛", "820000"],
    ["820301", "圣方济各堂区", "820300"]
  ],
  areaSelectChange = function (h, a, i) {
    function t(t, e) {
      t && (this.selectContainer = h("#" + t), this.selectContent = this.selectContainer.find(".city_content"), this.areaName = this.selectContainer.find(".area_name"), this.areaTitle = this.selectContainer.find(".area_title"), this.area_list = this.selectContainer.find(".area_list"), this.loadedHot = !1, this.loadedProvince = !1, this.currentArea = {}, this.o = e || {}, this.hasHot = this.o.hasHot || !1, this.hideCounty = this.o.hideCounty || !1, this.init())
    }
    return t.prototype = {
      init: function () {
        this.bindEvents(), this.tabChange(), this.createHideIpt()
      },
      bindEvents: function () {
        var r = this.selectContainer,
          e = this.selectContent,
          s = this,
          o = this.currentArea,
          t = this.o,
          d = (t && t.hideName && t.hideName, this.areaTitle.is('input[type="text"]'));
        this.areaName.on("click", function (t) {
          1 == e.is(":visible") ? s.hidePanel() : (s.hasHot && s.showHotCitys(a), s.showProvince(i), s.showPanel(), s.o.showFun && s.o.showFun(), s.selectCurrentItem()), t.stopPropagation()
        }), this.selectContainer.on("click", ".items a", function (t) {
          var e = h(this),
            a = e.attr("data-origin"),
            i = s.areaTitle,
            n = e.attr("data-id");
          "hot" == a ? (d ? i.val(e.text()).trigger("change") : i.text(e.text()), r.find('[data-target="city"]').val(n), s.hidePanel()) : "p" == a ? (o.p = e.text(), r.find('[data-target="province"]').val(n), r.find('[data-target="city"]').val(""), r.find('[data-target="county"]').val(""), s.tabItem("city_list"), d ? i.val(o.p).trigger("change") : i.text(o.p), s.showCity(n, "city_list", "c")) : "c" == a ? (o.c = e.text(), d ? i.val(o.p + " " + o.c).trigger("change") : i.text(o.p + "/" + o.c), r.find('[data-target="city"]').val(n), 1 == s.hideCounty ? s.hidePanel() : (s.tabItem("county_list"), s.showCity(n, "county_list", "t"))) : "t" == a && (o.t = e.text(), r.find('[data-target="county"]').val(n), a = o.p + "/" + o.c + "/" + o.t, o.p == o.c && (a = o.p + "/" + o.t), d ? i.val(a.replace(/\//g, " ")).trigger("change") : i.text(a), s.hidePanel()), s.o.clickItemFun && s.o.clickItemFun(e), t.stopPropagation()
        }), this.selectContainer.on("click", function (t) {
          s.showPanel(), t.stopPropagation()
        }), h(document.body).on("click", function () {
          var t = s.o.hideFun;
          s.o.hideFun = !1, s.hidePanel(), s.o.hideFun = t
        })
      },
      showPanel: function () {
        this.selectContent.show(), this.areaName.addClass("open")
      },
      hidePanel: function () {
        this.selectContent.hide(), this.areaName.removeClass("open"), this.o.hideFun && this.o.hideFun()
      },
      showHotCitys: function (t) {
        if (!1 === this.loadedHot) {
          this.area_list.hide();
          for (var e = this.selectContainer.find(".hot_city"), a = '<ul class="items clear">', i = 0, n = t.length; i < n; i++) {
            var r = t[i];
            a += '<li><a href="javascript:;" data-origin="hot" data-id=' + r[0] + ">" + r[1] + "</a></li>"
          }
          e.html(a += "</ul>").show(), this.loadedHot = !0
        }
      },
      showProvince: function (t) {
        if (!1 === this.loadedProvince) {
          var e = this.selectContainer.find(".province_list"),
            a = (this.area_list.hide(), '<dl class="sort-item clear">');
          for (n in t) {
            a += "<dt>" + n + '</dt><dd class="items">';
            for (var i = t[n], n = 0, r = i.length; n < r; n++) {
              var s = i[n];
              a += '<a href="javascript:;" data-origin="p" data-id=' + s[0] + ">" + s[1] + "</a>"
            }
          }
          e.html(a += "</dd></dl>").show(), this.loadedProvince = !0
        }
      },
      showCity: function (t, e, a) {
        var i = CITIESLIST;
        this.area_list.hide();
        for (var e = this.selectContainer.find("." + e), n = '<ul class="items clear">', r = 0, s = i.length; r < s; r++) {
          var o = i[r];
          o[2] == t && (n += '<li><a href="javascript:;" data-origin=' + a + " data-id=" + o[0] + ">" + o[1] + "</a></li>")
        }
        e.html(n += "</ul>").show()
      },
      tabChange: function () {
        var t = this.selectContainer,
          e = this;
        t.on("click", "[data-to]", function () {
          var t = h(this).attr("data-to");
          "province_list" == t && e.showProvince(i), e.tabItem(t)
        })
      },
      tabItem: function (t) {
        var e = this.selectContainer;
        e.find("[data-to]").removeClass("current"), e.find(".area_list").hide(), e.find("[data-to=" + t + "]").addClass("current"), e.find("." + t).show()
      },
      selectCurrentItem: function () {
        this.areaTitle;
        var t = this.selectContainer,
          e = (t.find("[data-id]").removeClass("current"), t.find('[data-target="province"]').val()),
          a = t.find('[data-target="city"]').val(),
          i = t.find('[data-target="county"]').val();
        a && (t.find(".hot_city").find("[data-id=" + a + "]").addClass("current"), t.find(".city_list").find("[data-id=" + a + "]").addClass("current")), e && t.find(".province_list").find("[data-id=" + e + "]").addClass("current"), i && t.find(".county_list").find("[data-id=" + i + "]").addClass("current")
      },
      createHideIpt: function () {
        var t = this.o,
          e = ((t = t && t.hideName ? t.hideName : {}).hotcityName, t.provinceName),
          a = t.cityName,
          t = t.countyName,
          i = this.selectContainer.attr("data-pid"),
          n = this.selectContainer.attr("data-cid"),
          r = this.selectContainer.attr("data-tid");
        this.areaName.append('<input type="hidden" data-target="province" name=' + (e || "provinceName") + " value=" + (i || "") + ">"), this.areaName.append('<input type="hidden" data-target="city" name=' + (a || "cityName") + " value=" + (n || "") + ">"), 1 != this.hideCounty && this.areaName.append('<input type="hidden" data-target="county" name=' + (t || "countyName") + " value=" + (r || "") + ">")
      },
      getProNameByCode: function (t) {
        if (t)
          for (var e in t += "", PROVINCELIST)
            for (var a = PROVINCELIST[e], i = 0, n = a.length; i < n; i++)
              if (h.trim(t) == a[i][0]) return a[i][1];
        return ""
      },
      getCityNameByCode: function (t) {
        if (t) {
          t += "";
          for (var e = 0, a = CITIESLIST.length; e < a; e++) {
            var i = CITIESLIST[e];
            if (t == i[0]) return i[1]
          }
        }
        return ""
      }
    }, t
  }(jQuery, HOTCITYSLIST, PROVINCELIST);
var breedArray = [{
  n: {
    i: "0101",
    n: "螺纹钢"
  }
}, {
  n: {
    i: "0102",
    n: "盘螺"
  }
}, {
  n: {
    i: "0103",
    n: "线材"
  }
}, {
  n: {
    i: "0104",
    n: "圆钢"
  }
}, {
  n: {
    i: "0201",
    n: "热轧卷"
  }
}, {
  n: {
    i: "0202",
    n: "开平板"
  }
}, {
  n: {
    i: "0401",
    n: "冷轧卷"
  }
}, {
  n: {
    i: "0402",
    n: "镀锌卷"
  }
}, {
  n: {
    i: "0501",
    n: "带钢"
  }
}, {
  n: {
    i: "06",
    n: "管材"
  }
}, {
  n: {
    i: "07",
    n: "型材"
  }
}, {
  n: {
    i: "08",
    n: "优特钢"
  }
}];
! function (t, e) {
  "function" == typeof define && define.amd ? define([], e) : "object" == typeof module && module.exports ? module.exports = e() : t.echarts = e()
}(this, function () {
    var t, e;
    ! function () {
      function i(t, e) {
        if (!e) return t;
        if (0 === t.indexOf(".")) {
          var i = e.split("/"),
            n = t.split("/"),
            r = i.length - 1,
            a = n.length,
            o = 0,
            s = 0;
          t: for (var l = 0; a > l; l++) switch (n[l]) {
            case "..":
              if (!(r > o)) break t;
              o++, s++;
              break;
            case ".":
              s++;
              break;
            default:
              break t
          }
          return i.length = r - o, n = n.slice(s), i.concat(n).join("/")
        }
        return t
      }

      function n(t) {
        function e(e, o) {
          if ("string" == typeof e) {
            var s = n[e];
            return s || (s = a(i(e, t)), n[e] = s), s
          }
          e instanceof Array && (o = o || function () {}, o.apply(this, r(e, o, t)))
        }
        var n = {};
        return e
      }

      function r(e, n, r) {
        for (var s = [], l = o[r], u = 0, c = Math.min(e.length, n.length); c > u; u++) {
          var h, d = i(e[u], r);
          switch (d) {
            case "require":
              h = l && l.require || t;
              break;
            case "exports":
              h = l.exports;
              break;
            case "module":
              h = l;
              break;
            default:
              h = a(d)
          }
          s.push(h)
        }
        return s
      }

      function a(t) {
        var e = o[t];
        if (!e) throw new Error("No " + t);
        if (!e.defined) {
          var i = e.factory,
            n = i.apply(this, r(e.deps || [], i, t));
          "undefined" != typeof n && (e.exports = n), e.defined = 1
        }
        return e.exports
      }
      var o = {};
      e = function (t, e, i) {
        o[t] = {
          id: t,
          deps: e,
          factory: i,
          defined: 0,
          exports: {},
          require: n(t)
        }
      }, t = n("")
    }();
    var i = "shadowOffsetY",
      n = "shadowOffsetX",
      r = "shadowBlur",
      a = "../core/util",
      o = "undefined",
      s = "__dirty",
      l = "moveTo",
      u = "transform",
      c = "option",
      h = "rotation",
      d = "stroke",
      f = "lineWidth",
      p = "applyTransform",
      m = "ordinal",
      v = "isString",
      g = "inherits",
      y = "isArray",
      x = "replace",
      _ = "zlevel",
      b = "traverse",
      w = "getDataParams",
      M = "splice",
      T = "dispose",
      S = "trigger",
      P = "dispatchAction",
      C = "series",
      A = "colorStops",
      L = "transparent",
      k = "ignore",
      I = "canvasSupported",
      z = "toLowerCase",
      D = "zrender/core/env",
      O = "offset",
      E = "seriesIndex",
      R = "getShallow",
      B = "getItemVisual",
      N = "parent",
      F = "dataIndex",
      V = "eachItemGraphicEl",
      H = "animation",
      G = "getItemGraphicEl",
      q = "getItemModel",
      W = "remove",
      U = "normal",
      Z = "../../util/graphic",
      j = "register",
      X = "dimensions",
      Y = "retrieve",
      $ = "coordDimToDataDim",
      K = "eachSeries",
      Q = "componentIndex",
      J = "dataToCoord",
      te = "toGlobalCoord",
      ee = "dataToPoint",
      ie = "isObject",
      ne = "getAxis",
      re = "category",
      ae = "update",
      oe = "function",
      se = "concat",
      le = "number",
      ue = "string",
      ce = "indexOf",
      he = "createElement",
      de = "filter",
      fe = "getExtent",
      pe = "ecModel",
      me = "create",
      ve = "length",
      ge = "extend",
      ye = "prototype",
      xe = "opacity",
      _e = "setStyle",
      be = "position",
      we = "bottom",
      Me = "center",
      Te = "middle",
      Se = "getHeight",
      Pe = "getWidth",
      Ce = "target",
      Ae = "silent",
      Le = "height",
      ke = "getBoundingRect",
      Ie = "getFont",
      ze = "textAlign",
      De = "textStyle",
      Oe = "getModel",
      Ee = "defaults",
      Re = "coordinateSystem",
      Be = "removeAll",
      Ne = "getData",
      Fe = "zrender/core/util",
      Ve = "require";
    e("echarts/chart/bar", [Ve, Fe, "../coord/cartesian/Grid", "./bar/BarSeries", "./bar/BarView", "../layout/barGrid", "../echarts", "../component/gridSimple"], function (t) {
        var e = t(Fe);
        t("../coord/cartesian/Grid"), t("./bar/BarSeries"), t("./bar/BarView");
        var i = t("../layout/barGrid"),
          n = t("../echarts");
        n.registerLayout(e.curry(i, "bar")), n.registerVisual(function (t) {
          t.eachSeriesByType("bar", function (t) {
            var e = t[Ne]();
            e.setVisual("legendSymbol", "roundRect")
          })
        }), t("../component/gridSimple")
      }), e("echarts/chart/line", [Ve, Fe, "../echarts", "./line/LineSeries", "./line/LineView", "../visual/symbol", "../layout/points", "../processor/dataSample", "../component/gridSimple"], function (t) {
        var e = t(Fe),
          i = t("../echarts"),
          n = i.PRIORITY;
        t("./line/LineSeries"), t("./line/LineView"), i.registerVisual(e.curry(t("../visual/symbol"), "line", "circle", "line")), i.registerLayout(e.curry(t("../layout/points"), "line")), i.registerProcessor(n.PROCESSOR.STATISTIC, e.curry(t("../processor/dataSample"), "line")), t("../component/gridSimple")
      }), e("echarts/component/gridSimple", [Ve, "../util/graphic", Fe, "../echarts", "../coord/cartesian/Grid", "./axis"], function (t) {
        var e = t("../util/graphic"),
          i = t(Fe),
          n = t("../echarts");
        t("../coord/cartesian/Grid"), t("./axis"), n.extendComponentView({
          type: "grid",
          render: function (t) {
            this.group[Be](), t.get("show") && this.group.add(new e.Rect({
              shape: t[Re].getRect(),
              style: i[Ee]({
                fill: t.get("backgroundColor")
              }, t.getItemStyle()),
              silent: !0,
              z2: -1
            }))
          }
        }), n.registerPreprocessor(function (t) {
          t.xAxis && t.yAxis && !t.grid && (t.grid = {})
        })
      }), e("echarts/component/legend", [Ve, "./legend/LegendModel", "./legend/legendAction", "./legend/LegendView", "../echarts", "./legend/legendFilter"], function (t) {
        t("./legend/LegendModel"), t("./legend/legendAction"), t("./legend/LegendView");
        var e = t("../echarts");
        e.registerProcessor(t("./legend/legendFilter"))
      }), e("echarts/component/title", [Ve, "../echarts", "../util/graphic", "../util/layout"], function (t) {
        var e = t("../echarts"),
          i = t("../util/graphic"),
          n = t("../util/layout");
        e.extendComponentModel({
          type: "title",
          layoutMode: {
            type: "box",
            ignoreSize: !0
          },
          defaultOption: {
            zlevel: 0,
            z: 6,
            show: !0,
            text: "",
            target: "blank",
            subtext: "",
            subtarget: "blank",
            left: 0,
            top: 0,
            backgroundColor: "rgba(0,0,0,0)",
            borderColor: "#ccc",
            borderWidth: 0,
            padding: 5,
            itemGap: 10,
            textStyle: {
              fontSize: 18,
              fontWeight: "bolder",
              color: "#333"
            },
            subtextStyle: {
              color: "#aaa"
            }
          }
        }), e.extendComponentView({
          type: "title",
          render: function (t, e, r) {
            if (this.group[Be](), t.get("show")) {
              var a = this.group,
                o = t[Oe](De),
                s = t[Oe]("subtextStyle"),
                l = t.get(ze),
                u = t.get("textBaseline"),
                c = new i.Text({
                  style: {
                    text: t.get("text"),
                    textFont: o[Ie](),
                    fill: o.getTextColor()
                  },
                  z2: 10
                }),
                h = c[ke](),
                d = t.get("subtext"),
                f = new i.Text({
                  style: {
                    text: d,
                    textFont: s[Ie](),
                    fill: s.getTextColor(),
                    y: h[Le] + t.get("itemGap"),
                    textBaseline: "top"
                  },
                  z2: 10
                }),
                p = t.get("link"),
                m = t.get("sublink");
              c[Ae] = !p, f[Ae] = !m, p && c.on("click", function () {
                window.open(p, "_" + t.get(Ce))
              }), m && f.on("click", function () {
                window.open(m, "_" + t.get("subtarget"))
              }), a.add(c), d && a.add(f);
              var v = a[ke](),
                g = t.getBoxLayoutParams();
              g.width = v.width, g[Le] = v[Le];
              var y = n.getLayoutRect(g, {
                width: r[Pe](),
                height: r[Se]()
              }, t.get("padding"));
              l || (l = t.get("left") || t.get("right"), l === Te && (l = Me), "right" === l ? y.x += y.width : l === Me && (y.x += y.width / 2)), u || (u = t.get("top") || t.get(we), u === Me && (u = Te), u === we ? y.y += y[Le] : u === Te && (y.y += y[Le] / 2), u = u || "top"), a.attr(be, [y.x, y.y]);
              var x = {
                textAlign: l,
                textVerticalAlign: u
              };
              c[_e](x), f[_e](x), v = a[ke]();
              var _ = y.margin,
                b = t.getItemStyle(["color", xe]);
              b.fill = t.get("backgroundColor");
              var w = new i.Rect({
                shape: {
                  x: v.x - _[3],
                  y: v.y - _[0],
                  width: v.width + _[1] + _[3],
                  height: v[Le] + _[0] + _[2]
                },
                style: b,
                silent: !0
              });
              i.subPixelOptimizeRect(w), a.add(w)
            }
          }
        })
      }), e("echarts/component/tooltip", [Ve, "./axisPointer", "./tooltip/TooltipModel", "./tooltip/TooltipView", "../echarts"], function (t) {
        t("./axisPointer"), t("./tooltip/TooltipModel"), t("./tooltip/TooltipView"), t("../echarts").registerAction({
          type: "showTip",
          event: "showTip",
          update: "tooltip:manuallyShowTip"
        }, function () {}), t("../echarts").registerAction({
          type: "hideTip",
          event: "hideTip",
          update: "tooltip:manuallyHideTip"
        }, function () {})
      }), e("echarts/component/markArea", [Ve, "./marker/MarkAreaModel", "./marker/MarkAreaView", "../echarts"], function (t) {
        t("./marker/MarkAreaModel"), t("./marker/MarkAreaView"), t("../echarts").registerPreprocessor(function (t) {
          t.markArea = t.markArea || {}
        })
      }), e("zrender/vml/vml", [Ve, "./graphic", "../zrender", "./Painter"], function (t) {
        t("./graphic"), t("../zrender").registerPainter("vml", t("./Painter"))
      }), e("echarts/scale/Time", [Ve, Fe, "../util/number", "../util/format", "./helper", "./Interval"], function (t) {
        var e = t(Fe),
          i = t("../util/number"),
          n = t("../util/format"),
          r = t("./helper"),
          a = t("./Interval"),
          o = a[ye],
          s = Math.ceil,
          l = Math.floor,
          u = 1e3,
          c = 60 * u,
          h = 60 * c,
          d = 24 * h,
          f = function (t, e, i, n) {
            for (; n > i;) {
              var r = i + n >>> 1;
              t[r][2] < e ? i = r + 1 : n = r
            }
            return i
          },
          p = a[ge]({
            type: "time",
            getLabel: function (t) {
              var e = this._stepLvl,
                i = new Date(t);
              return n.formatTime(e[0], i, this.getSetting("useUTC"))
            },
            niceExtent: function (t) {
              var e = this._extent;
              if (e[0] === e[1] && (e[0] -= d, e[1] += d), e[1] === -1 / 0 && 1 / 0 === e[0]) {
                var n = new Date;
                e[1] = new Date(n.getFullYear(), n.getMonth(), n.getDate()), e[0] = e[1] - d
              }
              this.niceTicks(t.splitNumber);
              var r = this._interval;
              t.fixMin || (e[0] = i.round(l(e[0] / r) * r)), t.fixMax || (e[1] = i.round(s(e[1] / r) * r))
            },
            niceTicks: function (t) {
              var e = this.getSetting("useUTC") ? 0 : 60 * i.getTimezoneOffset() * 1e3;
              t = t || 10;
              var n = this._extent,
                a = n[1] - n[0],
                o = a / t,
                u = m[ve],
                c = f(m, o, 0, u),
                h = m[Math.min(c, u - 1)],
                d = h[2];
              if ("year" === h[0]) {
                var p = a / d,
                  v = i.nice(p / t, !0);
                d *= v
              }
              var g = [Math.round(s((n[0] - e) / d) * d + e), Math.round(l((n[1] - e) / d) * d + e)];
              r.fixExtent(g, n), this._stepLvl = h, this._interval = d, this._niceExtent = g
            },
            parse: function (t) {
              return +i.parseDate(t)
            }
          });
        e.each(["contain", "normalize"], function (t) {
          p[ye][t] = function (e) {
            return o[t].call(this, this.parse(e))
          }
        });
        var m = [
          ["hh:mm:ss", 1, u],
          ["hh:mm:ss", 5, 5 * u],
          ["hh:mm:ss", 10, 10 * u],
          ["hh:mm:ss", 15, 15 * u],
          ["hh:mm:ss", 30, 30 * u],
          ["hh:mm\nMM-dd", 1, c],
          ["hh:mm\nMM-dd", 5, 5 * c],
          ["hh:mm\nMM-dd", 10, 10 * c],
          ["hh:mm\nMM-dd", 15, 15 * c],
          ["hh:mm\nMM-dd", 30, 30 * c],
          ["hh:mm\nMM-dd", 1, h],
          ["hh:mm\nMM-dd", 2, 2 * h],
          ["hh:mm\nMM-dd", 6, 6 * h],
          ["hh:mm\nMM-dd", 12, 12 * h],
          ["MM-dd\nyyyy", 1, d],
          ["week", 7, 7 * d],
          ["month", 1, 31 * d],
          ["quarter", 3, 380 * d / 4],
          ["half-year", 6, 380 * d / 2],
          ["year", 1, 380 * d]
        ];
        return p[me] = function (t) {
          return new p({
            useUTC: t[pe].get("useUTC")
          })
        }, p
      }), e("echarts/scale/Log", [Ve, Fe, "./Scale", "../util/number", "./Interval"], function (t) {
        function e(t, e) {
          return u(t, l(e))
        }
        var i = t(Fe),
          n = t("./Scale"),
          r = t("../util/number"),
          a = t("./Interval"),
          o = n[ye],
          s = a[ye],
          l = r.getPrecisionSafe,
          u = r.round,
          c = Math.floor,
          h = Math.ceil,
          d = Math.pow,
          f = Math.log,
          p = n[ge]({
            type: "log",
            base: 10,
            $constructor: function () {
              n.apply(this, arguments), this._originalScale = new a
            },
            getTicks: function () {
              var t = this._originalScale,
                n = this._extent,
                a = t[fe]();
              return i.map(s.getTicks.call(this), function (i) {
                var o = r.round(d(this.base, i));
                return o = i === n[0] && t.__fixMin ? e(o, a[0]) : o, o = i === n[1] && t.__fixMax ? e(o, a[1]) : o
              }, this)
            },
            getLabel: s.getLabel,
            scale: function (t) {
              return t = o.scale.call(this, t), d(this.base, t)
            },
            setExtent: function (t, e) {
              var i = this.base;
              t = f(t) / f(i), e = f(e) / f(i), s.setExtent.call(this, t, e)
            },
            getExtent: function () {
              var t = this.base,
                i = o[fe].call(this);
              i[0] = d(t, i[0]), i[1] = d(t, i[1]);
              var n = this._originalScale,
                r = n[fe]();
              return n.__fixMin && (i[0] = e(i[0], r[0])), n.__fixMax && (i[1] = e(i[1], r[1])), i
            },
            unionExtent: function (t) {
              this._originalScale.unionExtent(t);
              var e = this.base;
              t[0] = f(t[0]) / f(e), t[1] = f(t[1]) / f(e), o.unionExtent.call(this, t)
            },
            unionExtentFromData: function (t, e) {
              this.unionExtent(t.getDataExtent(e, !0, function (t) {
                return t > 0
              }))
            },
            niceTicks: function (t) {
              t = t || 10;
              var e = this._extent,
                i = e[1] - e[0];
              if (!(1 / 0 === i || 0 >= i)) {
                var n = r.quantity(i),
                  a = t / i * n;
                for (.5 >= a && (n *= 10); !isNaN(n) && Math.abs(n) < 1 && Math.abs(n) > 0;) n *= 10;
                var o = [r.round(h(e[0] / n) * n), r.round(c(e[1] / n) * n)];
                this._interval = n, this._niceExtent = o
              }
            },
            niceExtent: function (t) {
              s.niceExtent.call(this, t);
              var e = this._originalScale;
              e.__fixMin = t.fixMin, e.__fixMax = t.fixMax
            }
          });
        return i.each(["contain", "normalize"], function (t) {
          p[ye][t] = function (e) {
            return e = f(e) / f(this.base), o[t].call(this, e)
          }
        }), p[me] = function () {
          return new p
        }, p
      }), e(Fe, [Ve], function () {
        function t(e) {
          if (null == e || "object" != typeof e) return e;
          var i = e,
            n = E.call(e);
          if ("[object Array]" === n) {
            i = [];
            for (var r = 0, a = e[ve]; a > r; r++) i[r] = t(e[r])
          } else if (O[n]) i = e.constructor.from(e);
          else if (!D[n] && !L(e) && !M(e)) {
            i = {};
            for (var o in e) e.hasOwnProperty(o) && (i[o] = t(e[o]))
          }
          return i
        }

        function e(i, n, r) {
          if (!b(n) || !b(i)) return r ? t(n) : i;
          for (var a in n)
            if (n.hasOwnProperty(a)) {
              var o = i[a],
                s = n[a];
              !b(s) || !b(o) || y(s) || y(o) || M(s) || M(o) || w(s) || w(o) || L(s) || L(o) ? !r && a in i || (i[a] = t(n[a], !0)) : e(o, s, r)
            } return i
        }

        function i(t, i) {
          for (var n = t[0], r = 1, a = t[ve]; a > r; r++) n = e(n, t[r], i);
          return n
        }

        function n(t, e) {
          for (var i in e) e.hasOwnProperty(i) && (t[i] = e[i]);
          return t
        }

        function r(t, e, i) {
          for (var n in e) e.hasOwnProperty(n) && (i ? null != e[n] : null == t[n]) && (t[n] = e[n]);
          return t
        }

        function a() {
          return document[he]("canvas")
        }

        function o() {
          return z || (z = U.createCanvas().getContext("2d")), z
        }

        function s(t, e) {
          if (t) {
            if (t[ce]) return t[ce](e);
            for (var i = 0, n = t[ve]; n > i; i++)
              if (t[i] === e) return i
          }
          return -1
        }

        function l(t, e) {
          function i() {}
          var n = t[ye];
          i[ye] = e[ye], t[ye] = new i;
          for (var r in n) t[ye][r] = n[r];
          t[ye].constructor = t, t.superClass = e
        }

        function u(t, e, i) {
          t = ye in t ? t[ye] : t, e = ye in e ? e[ye] : e, r(t, e, i)
        }

        function c(t) {
          return t ? typeof t == ue ? !1 : typeof t[ve] == le : void 0
        }

        function h(t, e, i) {
          if (t && e)
            if (t.forEach && t.forEach === B) t.forEach(e, i);
            else if (t[ve] === +t[ve])
            for (var n = 0, r = t[ve]; r > n; n++) e.call(i, t[n], n, t);
          else
            for (var a in t) t.hasOwnProperty(a) && e.call(i, t[a], a, t)
        }

        function d(t, e, i) {
          if (t && e) {
            if (t.map && t.map === V) return t.map(e, i);
            for (var n = [], r = 0, a = t[ve]; a > r; r++) n.push(e.call(i, t[r], r, t));
            return n
          }
        }

        function f(t, e, i, n) {
          if (t && e) {
            if (t.reduce && t.reduce === H) return t.reduce(e, i, n);
            for (var r = 0, a = t[ve]; a > r; r++) i = e.call(n, i, t[r], r, t);
            return i
          }
        }

        function p(t, e, i) {
          if (t && e) {
            if (t[de] && t[de] === N) return t[de](e, i);
            for (var n = [], r = 0, a = t[ve]; a > r; r++) e.call(i, t[r], r, t) && n.push(t[r]);
            return n
          }
        }

        function m(t, e, i) {
          if (t && e)
            for (var n = 0, r = t[ve]; r > n; n++)
              if (e.call(i, t[n], n, t)) return t[n]
        }

        function v(t, e) {
          var i = F.call(arguments, 2);
          return function () {
            return t.apply(e, i[se](F.call(arguments)))
          }
        }

        function g(t) {
          var e = F.call(arguments, 1);
          return function () {
            return t.apply(this, e[se](F.call(arguments)))
          }
        }

        function y(t) {
          return "[object Array]" === E.call(t)
        }

        function x(t) {
          return typeof t === oe
        }

        function _(t) {
          return "[object String]" === E.call(t)
        }

        function b(t) {
          var e = typeof t;
          return e === oe || !!t && "object" == e
        }

        function w(t) {
          return !!D[E.call(t)]
        }

        function M(t) {
          return "object" == typeof t && typeof t.nodeType === le && "object" == typeof t.ownerDocument
        }

        function T(t) {
          return t !== t
        }

        function S() {
          for (var t = 0, e = arguments[ve]; e > t; t++)
            if (null != arguments[t]) return arguments[t]
        }

        function P() {
          return Function.call.apply(F, arguments)
        }

        function C(t, e) {
          if (!t) throw new Error(e)
        }

        function A(t) {
          t[G] = !0
        }

        function L(t) {
          return t[G]
        }

        function k(t) {
          t && h(t, function (t, e) {
            this.set(e, t)
          }, this)
        }

        function I(t) {
          return new k(t)
        }
        var z, D = {
            "[object Function]": 1,
            "[object RegExp]": 1,
            "[object Date]": 1,
            "[object Error]": 1,
            "[object CanvasGradient]": 1,
            "[object CanvasPattern]": 1,
            "[object Image]": 1,
            "[object Canvas]": 1
          },
          O = {
            "[object Int8Array]": 1,
            "[object Uint8Array]": 1,
            "[object Uint8ClampedArray]": 1,
            "[object Int16Array]": 1,
            "[object Uint16Array]": 1,
            "[object Int32Array]": 1,
            "[object Uint32Array]": 1,
            "[object Float32Array]": 1,
            "[object Float64Array]": 1
          },
          E = Object[ye].toString,
          R = Array[ye],
          B = R.forEach,
          N = R[de],
          F = R.slice,
          V = R.map,
          H = R.reduce,
          G = "__ec_primitive__",
          q = "_ec_",
          W = 4;
        k[ye] = {
          constructor: k,
          get: function (t) {
            return this[q + t]
          },
          set: function (t, e) {
            return this[q + t] = e, e
          },
          each: function (t, e) {
            void 0 !== e && (t = v(t, e));
            for (var i in this) this.hasOwnProperty(i) && t(this[i], i.slice(W))
          },
          removeKey: function (t) {
            delete this[t]
          }
        };
        var U = {
          inherits: l,
          mixin: u,
          clone: t,
          merge: e,
          mergeAll: i,
          extend: n,
          defaults: r,
          getContext: o,
          createCanvas: a,
          indexOf: s,
          slice: P,
          find: m,
          isArrayLike: c,
          each: h,
          map: d,
          reduce: f,
          filter: p,
          bind: v,
          curry: g,
          isArray: y,
          isString: _,
          isObject: b,
          isFunction: x,
          isBuiltInObject: w,
          isDom: M,
          eqNaN: T,
          retrieve: S,
          assert: C,
          setAsPrimitive: A,
          createHashMap: I,
          noop: function () {}
        };
        return U
      }), e("echarts/coord/cartesian/Grid", [Ve, "exports", "../../util/layout", "../../coord/axisHelper", Fe, "./Cartesian2D", "./Axis2D", "./GridModel", "../../CoordinateSystem"], function (t) {
        function e(t, e) {
          return t.getCoordSysModel() === e
        }

        function i(t) {
          var e, i = t.model,
            n = i.getFormattedLabels(),
            r = i[Oe]("axisLabel.textStyle"),
            a = 1,
            o = n[ve];
          o > 40 && (a = Math.ceil(o / 40));
          for (var s = 0; o > s; s += a)
            if (!t.isLabelIgnored(s)) {
              var l = r.getTextRect(n[s]);
              e ? e.union(l) : e = l
            } return e
        }

        function n(t, e, i) {
          this._coordsMap = {}, this._coordsList = [], this._axesMap = {}, this._axesList = [], this._initCartesian(t, e, i), this.model = t
        }

        function r(t, e) {
          var i = t[fe](),
            n = i[0] + i[1];
          t[te] = "x" === t.dim ? function (t) {
            return t + e
          } : function (t) {
            return n - t + e
          }, t.toLocalCoord = "x" === t.dim ? function (t) {
            return t - e
          } : function (t) {
            return n - t + e
          }
        }

        function a(t) {
          return u.map(v, function (e) {
            var i = t.getReferringComponents(e)[0];
            return i
          })
        }

        function o(t) {
          return "cartesian2d" === t.get(Re)
        }
        var s = t("../../util/layout"),
          l = t("../../coord/axisHelper"),
          u = t(Fe),
          c = t("./Cartesian2D"),
          h = t("./Axis2D"),
          d = u.each,
          f = l.ifAxisCrossZero,
          p = l.niceScaleExtent;
        t("./GridModel");
        var m = n[ye];
        m.type = "grid", m.axisPointerEnabled = !0, m.getRect = function () {
          return this._rect
        }, m[ae] = function (t, e) {
          function i(t) {
            var e = n[t];
            for (var i in e)
              if (e.hasOwnProperty(i)) {
                var r = e[i];
                if (r && (r.type === re || "time" === r.type || !f(r))) return !0
              } return !1
          }
          var n = this._axesMap;
          this._updateScale(t, this.model), d(n.x, function (t) {
            p(t.scale, t.model)
          }), d(n.y, function (t) {
            p(t.scale, t.model)
          }), d(n.x, function (t) {
            i("y") && (t.onZero = !1)
          }), d(n.y, function (t) {
            i("x") && (t.onZero = !1)
          }), this.resize(this.model, e)
        }, m.resize = function (t, e, n) {
          function a() {
            d(l, function (t) {
              var e = t.isHorizontal(),
                i = e ? [0, o.width] : [0, o[Le]],
                n = t.inverse ? 1 : 0;
              t.setExtent(i[n], i[1 - n]), r(t, e ? o.x : o.y)
            })
          }
          var o = s.getLayoutRect(t.getBoxLayoutParams(), {
            width: e[Pe](),
            height: e[Se]()
          });
          this._rect = o;
          var l = this._axesList;
          a(), !n && t.get("containLabel") && (d(l, function (t) {
            if (!t.model.get("axisLabel.inside")) {
              var e = i(t);
              if (e) {
                var n = t.isHorizontal() ? Le : "width",
                  r = t.model.get("axisLabel.margin");
                o[n] -= e[n] + r, "top" === t[be] ? o.y += e[Le] + r : "left" === t[be] && (o.x += e.width + r)
              }
            }
          }), a())
        }, m[ne] = function (t, e) {
          var i = this._axesMap[t];
          if (null != i) {
            if (null == e)
              for (var n in i)
                if (i.hasOwnProperty(n)) return i[n];
            return i[e]
          }
        }, m.getAxes = function () {
          return this._axesList.slice()
        }, m.getCartesian = function (t, e) {
          if (null != t && null != e) {
            var i = "x" + t + "y" + e;
            return this._coordsMap[i]
          }
          u[ie](t) && (e = t.yAxisIndex, t = t.xAxisIndex);
          for (var n = 0, r = this._coordsList; n < r[ve]; n++)
            if (r[n][ne]("x").index === t || r[n][ne]("y").index === e) return r[n]
        }, m.getCartesians = function () {
          return this._coordsList.slice()
        }, m.convertToPixel = function (t, e, i) {
          var n = this._findConvertTarget(t, e);
          return n.cartesian ? n.cartesian[ee](i) : n.axis ? n.axis[te](n.axis[J](i)) : null
        }, m.convertFromPixel = function (t, e, i) {
          var n = this._findConvertTarget(t, e);
          return n.cartesian ? n.cartesian.pointToData(i) : n.axis ? n.axis.coordToData(n.axis.toLocalCoord(i)) : null
        }, m._findConvertTarget = function (t, e) {
          var i, n, r = e.seriesModel,
            a = e.xAxisModel || r && r.getReferringComponents("xAxis")[0],
            o = e.yAxisModel || r && r.getReferringComponents("yAxis")[0],
            s = e.gridModel,
            l = this._coordsList;
          if (r) i = r[Re], u[ce](l, i) < 0 && (i = null);
          else if (a && o) i = this.getCartesian(a[Q], o[Q]);
          else if (a) n = this[ne]("x", a[Q]);
          else if (o) n = this[ne]("y", o[Q]);
          else if (s) {
            var c = s[Re];
            c === this && (i = this._coordsList[0])
          }
          return {
            cartesian: i,
            axis: n
          }
        }, m.containPoint = function (t) {
          var e = this._coordsList[0];
          return e ? e.containPoint(t) : void 0
        }, m._initCartesian = function (t, i) {
          function n(n) {
            return function (s, u) {
              if (e(s, t, i)) {
                var c = s.get(be);
                "x" === n ? "top" !== c && c !== we && (c = we, r[c] && (c = "top" === c ? we : "top")) : "left" !== c && "right" !== c && (c = "left", r[c] && (c = "left" === c ? "right" : "left")), r[c] = !0;
                var d = new h(n, l.createScaleByModel(s), [0, 0], s.get("type"), c),
                  f = d.type === re;
                d.onBand = f && s.get("boundaryGap"), d.inverse = s.get("inverse"), d.onZero = s.get("axisLine.onZero"), s.axis = d, d.model = s, d.grid = this, d.index = u, this._axesList.push(d), a[n][u] = d, o[n]++
              }
            }
          }
          var r = {
              left: !1,
              right: !1,
              top: !1,
              bottom: !1
            },
            a = {
              x: {},
              y: {}
            },
            o = {
              x: 0,
              y: 0
            };
          return i.eachComponent("xAxis", n("x"), this), i.eachComponent("yAxis", n("y"), this), o.x && o.y ? (this._axesMap = a, void d(a.x, function (e, i) {
            d(a.y, function (n, r) {
              var a = "x" + i + "y" + r,
                o = new c(a);
              o.grid = this, o.model = t, this._coordsMap[a] = o, this._coordsList.push(o), o.addAxis(e), o.addAxis(n)
            }, this)
          }, this)) : (this._axesMap = {}, void(this._axesList = []))
        }, m._updateScale = function (t, i) {
          function n(t, e, i) {
            d(i[$](e.dim), function (i) {
              e.scale.unionExtentFromData(t, i)
            })
          }
          u.each(this._axesList, function (t) {
            t.scale.setExtent(1 / 0, -1 / 0)
          }), t[K](function (r) {
            if (o(r)) {
              var s = a(r, t),
                l = s[0],
                u = s[1];
              if (!e(l, i, t) || !e(u, i, t)) return;
              var c = this.getCartesian(l[Q], u[Q]),
                h = r[Ne](),
                d = c[ne]("x"),
                f = c[ne]("y");
              "list" === h.type && (n(h, d, r), n(h, f, r))
            }
          }, this)
        }, m.getTooltipAxes = function (t) {
          var e = [],
            i = [];
          return d(this.getCartesians(), function (n) {
            var r = null != t && "auto" !== t ? n[ne](t) : n.getBaseAxis(),
              a = n.getOtherAxis(r);
            u[ce](e, r) < 0 && e.push(r), u[ce](i, a) < 0 && i.push(a)
          }), {
            baseAxes: e,
            otherAxes: i
          }
        };
        var v = ["xAxis", "yAxis"];
        return n[me] = function (t, e) {
          var i = [];
          return t.eachComponent("grid", function (r, a) {
            var o = new n(r, t, e);
            o.name = "grid_" + a, o.resize(r, e, !0), r[Re] = o, i.push(o)
          }), t[K](function (e) {
            if (o(e)) {
              var i = a(e, t),
                n = i[0],
                r = i[1],
                s = n.getCoordSysModel(),
                l = s[Re];
              e[Re] = l.getCartesian(n[Q], r[Q])
            }
          }), i
        }, n[X] = n[ye][X] = c[ye][X], t("../../CoordinateSystem")[j]("cartesian2d", n), n
      }), e("echarts/chart/bar/BarSeries", [Ve, "./BaseBarSeries"], function (t) {
        return t("./BaseBarSeries")[ge]({
          type: "series.bar",
          dependencies: ["grid", "polar"],
          brushSelector: "rect"
        })
      }), e("echarts/chart/bar/BarView", [Ve, Fe, Z, "./helper", "../../model/Model", "./barItemStyle", "../../echarts"], function (t) {
        function e(t, e, i) {
          i.style.text = "", o.updateProps(i, {
            shape: {
              width: 0
            }
          }, e, t, function () {
            i[N] && i[N][W](i)
          })
        }

        function i(t, e, i) {
          i.style.text = "", o.updateProps(i, {
            shape: {
              r: i.shape.r0
            }
          }, e, t, function () {
            i[N] && i[N][W](i)
          })
        }

        function n(t, e, i, n, r, l, u, c) {
          var h = e[B](i, "color"),
            d = e[B](i, xe),
            f = n[Oe]("itemStyle.normal"),
            p = n[Oe]("itemStyle.emphasis").getBarItemStyle();
          c || t.setShape("r", f.get("barBorderRadius") || 0), t.useStyle(a[Ee]({
            fill: h,
            opacity: d
          }, f.getBarItemStyle()));
          var m = n[R]("cursor");
          m && t.attr("cursor", m);
          var v = u ? r[Le] > 0 ? we : "top" : r.width > 0 ? "left" : "right";
          c || s.setLabel(t.style, p, n, h, l, i, v), o.setHoverStyle(t, p)
        }

        function r(t, e) {
          var i = t.get(l) || 0;
          return Math.min(i, Math.abs(e.width), Math.abs(e[Le]))
        }
        var a = t(Fe),
          o = t(Z),
          s = t("./helper"),
          l = ["itemStyle", U, "barBorderWidth"];
        a[ge](t("../../model/Model")[ye], t("./barItemStyle"));
        var u = t("../../echarts").extendChartView({
            type: "bar",
            render: function (t, e, i) {
              var n = t.get(Re);
              return ("cartesian2d" === n || "polar" === n) && this._render(t, e, i), this.group
            },
            dispose: a.noop,
            _render: function (t) {
              var r, a = this.group,
                s = t[Ne](),
                l = this._data,
                u = t[Re],
                d = u.getBaseAxis();
              "cartesian2d" === u.type ? r = d.isHorizontal() : "polar" === u.type && (r = "angle" === d.dim);
              var f = t.isAnimationEnabled() ? t : null;
              s.diff(l).add(function (e) {
                if (s.hasValue(e)) {
                  var i = s[q](e),
                    o = h[u.type](s, e, i),
                    l = c[u.type](s, e, i, o, r, f);
                  s.setItemGraphicEl(e, l), a.add(l), n(l, s, e, i, o, t, r, "polar" === u.type)
                }
              })[ae](function (e, i) {
                var d = l[G](i);
                if (!s.hasValue(e)) return void a[W](d);
                var p = s[q](e),
                  m = h[u.type](s, e, p);
                d ? o.updateProps(d, {
                  shape: m
                }, f, e) : d = c[u.type](s, e, p, m, r, f, !0), s.setItemGraphicEl(e, d), a.add(d), n(d, s, e, p, m, t, r, "polar" === u.type)
              })[W](function (t) {
                var n = l[G](t);
                "cartesian2d" === u.type ? n && e(t, f, n) : n && i(t, f, n)
              }).execute(), this._data = s
            },
            remove: function (t) {
              var n = this.group,
                r = this._data;
              t.get(H) ? r && r[V](function (n) {
                "sector" === n.type ? i(n[F], t, n) : e(n[F], t, n)
              }) : n[Be]()
            }
          }),
          c = {
            cartesian2d: function (t, e, i, n, r, s, l) {
              var u = new o.Rect({
                shape: a[ge]({}, n)
              });
              if (s) {
                var c = u.shape,
                  h = r ? Le : "width",
                  d = {};
                c[h] = 0, d[h] = n[h], o[l ? "updateProps" : "initProps"](u, {
                  shape: d
                }, s, e)
              }
              return u
            },
            polar: function (t, e, i, n, r, s, l) {
              var u = new o.Sector({
                shape: a[ge]({}, n)
              });
              if (s) {
                var c = u.shape,
                  h = r ? "r" : "endAngle",
                  d = {};
                c[h] = r ? 0 : n.startAngle, d[h] = n[h], o[l ? "updateProps" : "initProps"](u, {
                  shape: d
                }, s, e)
              }
              return u
            }
          },
          h = {
            cartesian2d: function (t, e, i) {
              var n = t.getItemLayout(e),
                a = r(i, n),
                o = n.width > 0 ? 1 : -1,
                s = n[Le] > 0 ? 1 : -1;
              return {
                x: n.x + o * a / 2,
                y: n.y + s * a / 2,
                width: n.width - o * a,
                height: n[Le] - s * a
              }
            },
            polar: function (t, e) {
              var i = t.getItemLayout(e);
              return {
                cx: i.cx,
                cy: i.cy,
                r0: i.r0,
                r: i.r,
                startAngle: i.startAngle,
                endAngle: i.endAngle
              }
            }
          };
        return u
      }), e("echarts/layout/barGrid", [Ve, Fe, "../util/number"], function (t) {
        function e(t) {
          return t.get("stack") || c + t[E]
        }

        function i(t) {
          return t.dim + t.index
        }

        function n(t, e) {
          var i = [],
            n = t.axis,
            r = "axis0";
          if (n.type === re) {
            for (var o = n.getBandWidth(), l = 0; l < t.count; l++) i.push(s[Ee]({
              bandWidth: o,
              axisKey: r,
              stackId: c + l
            }, t));
            for (var u = a(i, e), h = [], l = 0; l < t.count; l++) {
              var d = u[r][c + l];
              d.offsetCenter = d[O] + d.width / 2, h.push(d)
            }
            return h
          }
        }

        function r(t, n) {
          var r = s.map(t, function (t) {
            var n = t[Ne](),
              r = t[Re],
              a = r.getBaseAxis(),
              o = a[fe](),
              s = a.type === re ? a.getBandWidth() : Math.abs(o[1] - o[0]) / n.count(),
              l = u(t.get("barWidth"), s),
              c = u(t.get("barMaxWidth"), s),
              h = t.get("barGap"),
              d = t.get("barCategoryGap");
            return {
              bandWidth: s,
              barWidth: l,
              barMaxWidth: c,
              barGap: h,
              barCategoryGap: d,
              axisKey: i(a),
              stackId: e(t)
            }
          });
          return a(r, n)
        }

        function a(t) {
          var e = {};
          s.each(t, function (t) {
            var i = t.axisKey,
              n = t.bandWidth,
              r = e[i] || {
                bandWidth: n,
                remainedWidth: n,
                autoWidthCount: 0,
                categoryGap: "20%",
                gap: "30%",
                stacks: {}
              },
              a = r.stacks;
            e[i] = r;
            var o = t.stackId;
            a[o] || r.autoWidthCount++, a[o] = a[o] || {
              width: 0,
              maxWidth: 0
            };
            var s = t.barWidth;
            s && !a[o].width && (s = Math.min(r.remainedWidth, s), a[o].width = s, r.remainedWidth -= s);
            var l = t.barMaxWidth;
            l && (a[o].maxWidth = l);
            var u = t.barGap;
            null != u && (r.gap = u);
            var c = t.barCategoryGap;
            null != c && (r.categoryGap = c)
          });
          var i = {};
          return s.each(e, function (t, e) {
            i[e] = {};
            var n = t.stacks,
              r = t.bandWidth,
              a = u(t.categoryGap, r),
              o = u(t.gap, 1),
              l = t.remainedWidth,
              c = t.autoWidthCount,
              h = (l - a) / (c + (c - 1) * o);
            h = Math.max(h, 0), s.each(n, function (t) {
              var e = t.maxWidth;
              e && h > e && (e = Math.min(e, l), t.width && (e = Math.min(e, t.width)), l -= e, t.width = e, c--)
            }), h = (l - a) / (c + (c - 1) * o), h = Math.max(h, 0);
            var d, f = 0;
            s.each(n, function (t) {
              t.width || (t.width = h), d = t, f += t.width * (1 + o)
            }), d && (f -= d.width * o);
            var p = -f / 2;
            s.each(n, function (t, n) {
              i[e][n] = i[e][n] || {
                offset: p,
                width: t.width
              }, p += t.width * (1 + o)
            })
          }), i
        }

        function o(t, n) {
          var a = r(s[de](n.getSeriesByType(t), function (t) {
              return !n.isSeriesFiltered(t) && t[Re] && "cartesian2d" === t[Re].type
            })),
            o = {},
            l = {};
          n.eachSeriesByType(t, function (t) {
            if ("cartesian2d" === t[Re].type) {
              var n = t[Ne](),
                r = t[Re],
                s = r.getBaseAxis(),
                u = e(t),
                c = a[i(s)][u],
                h = c[O],
                d = c.width,
                f = r.getOtherAxis(s),
                p = t.get("barMinHeight") || 0,
                m = s.onZero ? f[te](f[J](0)) : f.getGlobalExtent()[0],
                v = r.dataToPoints(n, !0);
              o[u] = o[u] || [], l[u] = l[u] || [], n.setLayout({
                offset: h,
                size: d
              }), n.each(f.dim, function (t, e) {
                if (!isNaN(t)) {
                  o[u][e] || (o[u][e] = {
                    p: m,
                    n: m
                  }, l[u][e] = {
                    p: m,
                    n: m
                  });
                  var i, r, a, s, c = t >= 0 ? "p" : "n",
                    g = v[e],
                    y = o[u][e][c],
                    x = l[u][e][c];
                  f.isHorizontal() ? (i = y, r = g[1] + h, a = g[0] - x, s = d, l[u][e][c] += a, Math.abs(a) < p && (a = (0 > a ? -1 : 1) * p), o[u][e][c] += a) : (i = g[0] + h, r = y, a = d, s = g[1] - x, l[u][e][c] += s, Math.abs(s) < p && (s = (0 >= s ? -1 : 1) * p), o[u][e][c] += s), n.setItemLayout(e, {
                    x: i,
                    y: r,
                    width: a,
                    height: s
                  })
                }
              }, !0)
            }
          }, this)
        }
        var s = t(Fe),
          l = t("../util/number"),
          u = l.parsePercent,
          c = "__ec_stack_";
        return o.getLayoutOnAxis = n, o
      }), e("echarts/echarts", [Ve, D, "./model/Global", "./ExtensionAPI", "./CoordinateSystem", "./model/OptionManager", "./model/Component", "./model/Series", "./view/Component", "./view/Chart", "./util/graphic", "./util/model", "./util/throttle", "zrender", Fe, "zrender/tool/color", "zrender/mixin/Eventful", "zrender/core/timsort", "./visual/seriesColor", "./preprocessor/backwardCompat", "./loading/default", "./data/List", "./model/Model", "./coord/Axis", "./util/number", "./util/format", "zrender/core/matrix", "zrender/core/vector", "./helper"], function (t) {
          function e(t) {
            return function (e, i, n) {
              e = e && e[z](), Me[ye][t].call(this, e, i, n)
            }
          }

          function i() {
            Me.call(this)
          }

          function n(t, e, n) {
            function r(t, e) {
              return t.prio - e.prio
            }
            n = n || {}, typeof e === ue && (e = ni[e]), this.id, this.group, this._dom = t;
            var a = this._zr = pe.init(t, {
              renderer: n.renderer || "canvas",
              devicePixelRatio: n.devicePixelRatio,
              width: n.width,
              height: n[Le]
            });
            this._throttledZrFlush = fe.throttle(xe.bind(a.flush, a), 17), this._theme = xe.clone(e), this._chartsViews = [], this._chartsMap = {}, this._componentsViews = [], this._componentsMap = {}, this._coordSysMgr = new Y, this._api = V(this), Me.call(this), this._messageCenter = new i, this._initEvents(), this.resize = xe.bind(this.resize, this), this._pendingActions = [], Te(ii, r), Te(Je, r), a[H].on("frame", this._onframe, this), xe.setAsPrimitive(this)
          }

          function r(t, e, i) {
            var n, r = this._model,
              a = this._coordSysMgr.getCoordinateSystems();
            e = he.parseFinder(r, e);
            for (var o = 0; o < a[ve]; o++) {
              var s = a[o];
              if (s[t] && null != (n = s[t](r, e, i))) return n
            }
          }

          function a(t, e, i, n, r) {
            function a(n) {
              n && n.__alive && n[e] && n[e](n.__model, o, t._api, i)
            }
            var o = t._model;
            if (!n) return void ke(t._componentsViews[se](t._chartsViews), a);
            var s = {};
            s[n + "Id"] = i[n + "Id"], s[n + "Index"] = i[n + "Index"], s[n + "Name"] = i[n + "Name"];
            var l = {
              mainType: n,
              query: s
            };
            r && (l.subType = r), o && o.eachComponent(l, function (e) {
              a(t[n === C ? "_chartsMap" : "_componentsMap"][e.__viewId])
            }, t)
          }

          function o(t, e) {
            var i = t.type,
              n = t.escapeConnect,
              r = Ke[i],
              o = r.actionInfo,
              s = (o[ae] || ae).split(":"),
              l = s.pop();
            s = null != s[0] && Ie(s[0]), this[We] = !0;
            var u = [t],
              c = !1;
            t.batch && (c = !0, u = xe.map(t.batch, function (e) {
              return e = xe[Ee](xe[ge]({}, e), t), e.batch = null, e
            }));
            var h, d = [],
              f = "highlight" === i || "downplay" === i;
            ke(u, function (t) {
              h = r.action(t, this._model, this._api), h = h || xe[ge]({}, t), h.type = o.event || h.type, d.push(h), f ? a(this, l, t, C) : s && a(this, l, t, s.main, s.sub)
            }, this), "none" === l || f || s || (this[Ze] ? (Ye.prepareAndUpdate.call(this, t), this[Ze] = !1) : Ye[l].call(this, t)), h = c ? {
              type: o.event || i,
              escapeConnect: n,
              batch: d
            } : d[0], this[We] = !1, !e && this._messageCenter[S](h.type, h)
          }

          function s(t) {
            for (var e = this._pendingActions; e[ve];) {
              var i = e.shift();
              o.call(this, i, t)
            }
          }

          function l(t) {
            !t && this[S]("updated")
          }

          function u(t, e, i) {
            var n = this._api;
            ke(this._componentsViews, function (r) {
              var a = r.__model;
              r[t](a, e, n, i), R(a, r)
            }, this), e[K](function (r) {
              var a = this._chartsMap[r.__viewId];
              a[t](r, e, n, i), R(r, a), O(r, a)
            }, this), x(this._zr, e), ke(ei, function (t) {
              t(e, n)
            })
          }

          function c(t, e) {
            for (var i = "component" === t, n = i ? this._componentsViews : this._chartsViews, r = i ? this._componentsMap : this._chartsMap, a = this._zr, o = 0; o < n[ve]; o++) n[o].__alive = !1;
            e[i ? "eachComponent" : K](function (t, o) {
              if (i) {
                if (t === C) return
              } else o = t;
              var s = "_ec_" + o.id + "_" + o.type,
                l = r[s];
              if (!l) {
                var u = Ie(o.type),
                  c = i ? ee.getClass(u.main, u.sub) : ne.getClass(u.sub);
                if (!c) return;
                l = new c, l.init(e, this._api), r[s] = l, n.push(l), a.add(l.group)
              }
              o.__viewId = l.__id = s, l.__alive = !0, l.__model = o, l.group.__ecComponentInfo = {
                mainType: o.mainType,
                index: o[Q]
              }
            }, this);
            for (var o = 0; o < n[ve];) {
              var s = n[o];
              s.__alive ? o++ : (a[W](s.group), s[T](e, this._api), n[M](o, 1), delete r[s.__id], s.__id = s.group.__ecComponentInfo = null)
            }
          }

          function h(t, e) {
            ke(Je, function (i) {
              i.func(t, e)
            })
          }

          function d(t) {
            var e = {};
            t[K](function (t) {
              var i = t.get("stack"),
                n = t[Ne]();
              if (i && "list" === n.type) {
                var r = e[i];
                e.hasOwnProperty(i) && r && (n.stackedOn = r), e[i] = n
              }
            })
          }

          function f(t, e) {
            var i = this._api;
            ke(ii, function (n) {
              n.isLayout && n.func(t, i, e)
            })
          }

          function p(t, e, i) {
            var n = this._api;
            t.clearColorPalette(), t[K](function (t) {
              t.clearColorPalette()
            }), ke(ii, function (r) {
              (!i || !r.isLayout) && r.func(t, n, e)
            })
          }

          function m(t, e) {
            var i = this._api;
            ke(this._componentsViews, function (n) {
              var r = n.__model;
              n.render(r, t, i, e), R(r, n)
            }, this), ke(this._chartsViews, function (t) {
              t.__alive = !1
            }, this), t[K](function (n) {
              var r = this._chartsMap[n.__viewId];
              r.__alive = !0, r.render(n, t, i, e), r.group[Ae] = !!n.get(Ae), R(n, r), O(n, r)
            }, this), x(this._zr, t), ke(this._chartsViews, function (e) {
              e.__alive || e[W](t, i)
            }, this)
          }

          function x(t, e) {
            var i = t.storage,
              n = 0;
            i[b](function (t) {
              t.isGroup || n++
            }), n > e.get("hoverLayerThreshold") && !q.node && i[b](function (t) {
              t.isGroup || (t.useHoverLayer = !0)
            })
          }

          function O(t, e) {
            var i = 0;
            e.group[b](function (t) {
              "group" === t.type || t[k] || i++
            });
            var n = +t.get("progressive"),
              r = i > t.get("progressiveThreshold") && n && !q.node;
            r && e.group[b](function (t) {
                t.isGroup || (t.progressive = r ? Math.floor(i++/n):-1,r&&t.stopAnimation(!0))});var a=t.get("blendMode")||null;e.group[b](function(t){t.isGroup||t[_e]("blend",a)})}function R(t,e){var i=t.get("z"),n=t.get(_);e.group[b](function(t){"group"!==t.type&&(null!=i&&(t.z=i),null!=n&&(t[_]=n))})}function V(t){var e=t._coordSysMgr;return xe[ge](new Z(t),{getCoordinateSystems:xe.bind(e.getCoordinateSystems,e),getComponentByElement:function(e){for(;e;){var i=e.__ecComponentInfo;if(null!=i)return t._model.getComponent(i.mainType,i.index);e=e[N]}}})}function G(t){function e(t,e){for(var i=0;i<t[ve];i++){var n=t[i];n[a]=e}}var i=0,n=1,r=2,a="__connectUpdateStatus";xe.each(Qe,function(o,s){t._messageCenter.on(s,function(o){if(oi[t.group]&&t[a]!==i){if(o&&o.escapeConnect)return;var s=t.makeActionFromEvent(o),l=[];xe.each(ai,function(e){e!==t&&e.group===t.group&&l.push(e)}),e(l,i),ke(l,function(t){t[a]!==n&&t[P](s)}),e(l,r)}})})}var q=t(D),U=t("./model / Global "),Z=t(". / ExtensionAPI "),Y=t(". / CoordinateSystem "),$=t(". / model / OptionManager "),J=t(". / model / Component "),te=t(". / model / Series "),ee=t(". / view / Component "),ne=t(". / view / Chart "),re=t(". / util / graphic "),he=t(". / util / model "),fe=t(". / util / throttle "),pe=t("
                    zrender "),xe=t(Fe),be=t("
                    zrender / tool / color "),Me=t("
                    zrender / mixin / Eventful "),Te=t("
                    zrender / core / timsort "),ke=xe.each,Ie=J.parseClassType,ze=1e3,De=5e3,Be=1e3,Ve=2e3,He=3e3,Ge=4e3,qe=5e3,We="
                    __flagInMainProcess ",Ue="
                    __hasGradientOrPatternBg ",Ze="
                    __optionUpdated ",je=/^[a-zA-Z0-9_]+$/;i[ye].on=e("
                    on "),i[ye].off=e("
                    off "),i[ye].one=e("
                    one "),xe.mixin(i,Me);var Xe=n[ye];Xe._onframe=function(){if(this[Ze]){var t=this[Ze][Ae];this[We]=!0,Ye.prepareAndUpdate.call(this),this[We]=!1,this[Ze]=!1,s.call(this,t),l.call(this,t)}},Xe.getDom=function(){return this._dom},Xe.getZr=function(){return this._zr},Xe.setOption=function(t,e,i){var n;if(xe[ie](e)&&(i=e.lazyUpdate,n=e[Ae],e=e.notMerge),this[We]=!0,!this._model||e){var r=new $(this._api),a=this._theme,o=this._model=new U(null,null,a,r);o.init(null,null,a,r)}this._model.setOption(t,ti),i?(this[Ze]={silent:n},this[We]=!1):(Ye.prepareAndUpdate.call(this),this._zr.flush(),this[Ze]=!1,this[We]=!1,s.call(this,n),l.call(this,n))
                  }, Xe.setTheme = function () {
                    console.log("ECharts#setTheme() is DEPRECATED in ECharts 3.0")
                  }, Xe[Oe] = function () {
                    return this._model
                  }, Xe.getOption = function () {
                    return this._model && this._model.getOption()
                  }, Xe[Pe] = function () {
                    return this._zr[Pe]()
                  }, Xe[Se] = function () {
                    return this._zr[Se]()
                  }, Xe.getDevicePixelRatio = function () {
                    return this._zr.painter.dpr || window.devicePixelRatio || 1
                  }, Xe.getRenderedCanvas = function (t) {
                    if (q[I]) {
                      t = t || {}, t.pixelRatio = t.pixelRatio || 1, t.backgroundColor = t.backgroundColor || this._model.get("backgroundColor");
                      var e = this._zr,
                        i = e.storage.getDisplayList();
                      return xe.each(i, function (t) {
                        t.stopAnimation(!0)
                      }), e.painter.getRenderedCanvas(t)
                    }
                  }, Xe.getDataURL = function (t) {
                    t = t || {};
                    var e = t.excludeComponents,
                      i = this._model,
                      n = [],
                      r = this;
                    ke(e, function (t) {
                      i.eachComponent({
                        mainType: t
                      }, function (t) {
                        var e = r._componentsMap[t.__viewId];
                        e.group[k] || (n.push(e), e.group[k] = !0)
                      })
                    });
                    var a = this.getRenderedCanvas(t).toDataURL("image/" + (t && t.type || "png"));
                    return ke(n, function (t) {
                      t.group[k] = !1
                    }), a
                  }, Xe.getConnectedDataURL = function (t) {
                    if (q[I]) {
                      var e = this.group,
                        i = Math.min,
                        n = Math.max,
                        r = 1 / 0;
                      if (oi[e]) {
                        var a = r,
                          o = r,
                          s = -r,
                          l = -r,
                          u = [],
                          c = t && t.pixelRatio || 1;
                        xe.each(ai, function (r) {
                          if (r.group === e) {
                            var c = r.getRenderedCanvas(xe.clone(t)),
                              h = r.getDom().getBoundingClientRect();
                            a = i(h.left, a), o = i(h.top, o), s = n(h.right, s), l = n(h[we], l), u.push({
                              dom: c,
                              left: h.left,
                              top: h.top
                            })
                          }
                        }), a *= c, o *= c, s *= c, l *= c;
                        var h = s - a,
                          d = l - o,
                          f = xe.createCanvas();
                        f.width = h, f[Le] = d;
                        var p = pe.init(f);
                        return ke(u, function (t) {
                          var e = new re.Image({
                            style: {
                              x: t.left * c - a,
                              y: t.top * c - o,
                              image: t.dom
                            }
                          });
                          p.add(e)
                        }), p.refreshImmediately(), f.toDataURL("image/" + (t && t.type || "png"))
                      }
                      return this.getDataURL(t)
                    }
                  }, Xe.convertToPixel = xe.curry(r, "convertToPixel"), Xe.convertFromPixel = xe.curry(r, "convertFromPixel"), Xe.containPixel = function (t, e) {
                    var i, n = this._model;
                    return t = he.parseFinder(n, t), xe.each(t, function (t, n) {
                      n[ce]("Models") >= 0 && xe.each(t, function (t) {
                        var r = t[Re];
                        if (r && r.containPoint) i |= !!r.containPoint(e);
                        else if ("seriesModels" === n) {
                          var a = this._chartsMap[t.__viewId];
                          a && a.containPoint && (i |= a.containPoint(e, t))
                        }
                      }, this)
                    }, this), !!i
                  }, Xe.getVisual = function (t, e) {
                    var i = this._model;
                    t = he.parseFinder(i, t, {
                      defaultMainType: "series"
                    });
                    var n = t.seriesModel,
                      r = n[Ne](),
                      a = t.hasOwnProperty("dataIndexInside") ? t.dataIndexInside : t.hasOwnProperty(F) ? r.indexOfRawIndex(t[F]) : null;
                    return null != a ? r[B](a, e) : r.getVisual(e)
                  }, Xe.getViewOfComponentModel = function (t) {
                    return this._componentsMap[t.__viewId]
                  }, Xe.getViewOfSeriesModel = function (t) {
                    return this._chartsMap[t.__viewId]
                  };
                  var Ye = {
                    update: function (t) {
                      var e = this._model,
                        i = this._api,
                        n = this._coordSysMgr,
                        r = this._zr;
                      if (e) {
                        e.restoreData(), n[me](this._model, this._api), h.call(this, e, i), d.call(this, e), n[ae](e, i), p.call(this, e, t), m.call(this, e, t);
                        var a = e.get("backgroundColor") || L,
                          o = r.painter;
                        if (o.isSingleCanvas && o.isSingleCanvas()) r.configLayer(0, {
                          clearColor: a
                        });
                        else {
                          if (!q[I]) {
                            var s = be.parse(a);
                            a = be.stringify(s, "rgb"), 0 === s[3] && (a = L)
                          }
                          a[A] || a.image ? (r.configLayer(0, {
                            clearColor: a
                          }), this[Ue] = !0, this._dom.style.background = L) : (this[Ue] && r.configLayer(0, {
                            clearColor: null
                          }), this[Ue] = !1, this._dom.style.background = a)
                        }
                        ke(ei, function (t) {
                          t(e, i)
                        })
                      }
                    },
                    updateView: function (t) {
                      var e = this._model;
                      e && (e[K](function (t) {
                        t[Ne]().clearAllVisual()
                      }), p.call(this, e, t), u.call(this, "updateView", e, t))
                    },
                    updateVisual: function (t) {
                      var e = this._model;
                      e && (e[K](function (t) {
                        t[Ne]().clearAllVisual()
                      }), p.call(this, e, t, !0), u.call(this, "updateVisual", e, t))
                    },
                    updateLayout: function (t) {
                      var e = this._model;
                      e && (f.call(this, e, t), u.call(this, "updateLayout", e, t))
                    },
                    prepareAndUpdate: function (t) {
                      var e = this._model;
                      c.call(this, "component", e), c.call(this, "chart", e), Ye[ae].call(this, t)
                    }
                  }; Xe.resize = function (t) {
                    this[We] = !0, this._zr.resize(t);
                    var e = this._model && this._model.resetOption("media"),
                      i = e ? "prepareAndUpdate" : ae;
                    Ye[i].call(this), this._loadingFX && this._loadingFX.resize(), this[We] = !1;
                    var n = t && t[Ae];
                    s.call(this, n), l.call(this, n)
                  }, Xe.showLoading = function (t, e) {
                    if (xe[ie](t) && (e = t, t = ""), t = t || "default", this.hideLoading(), ri[t]) {
                      var i = ri[t](this._api, e),
                        n = this._zr;
                      this._loadingFX = i, n.add(i)
                    }
                  }, Xe.hideLoading = function () {
                    this._loadingFX && this._zr[W](this._loadingFX), this._loadingFX = null
                  }, Xe.makeActionFromEvent = function (t) {
                    var e = xe[ge]({}, t);
                    return e.type = Qe[t.type], e
                  }, Xe[P] = function (t, e) {
                    if (xe[ie](e) || (e = {
                        silent: !!e
                      }), Ke[t.type]) {
                      if (this[We]) return void this._pendingActions.push(t);
                      o.call(this, t, e[Ae]), e.flush ? this._zr.flush(!0) : e.flush !== !1 && q.browser.weChat && this._throttledZrFlush(), s.call(this, e[Ae]), l.call(this, e[Ae])
                    }
                  }, Xe.on = e("on"), Xe.off = e("off"), Xe.one = e("one");
                  var $e = ["click", "dblclick", "mouseover", "mouseout", "mousemove", "mousedown", "mouseup", "globalout", "contextmenu"]; Xe._initEvents = function () {
                    ke($e, function (t) {
                      this._zr.on(t, function (e) {
                        var i, n = this[Oe](),
                          r = e[Ce];
                        if ("globalout" === t) i = {};
                        else if (r && null != r[F]) {
                          var a = r.dataModel || n.getSeriesByIndex(r[E]);
                          i = a && a[w](r[F], r.dataType) || {}
                        } else r && r.eventData && (i = xe[ge]({}, r.eventData));
                        i && (i.event = e, i.type = t, this[S](t, i))
                      }, this)
                    }, this), ke(Qe, function (t, e) {
                      this._messageCenter.on(e, function (t) {
                        this[S](e, t)
                      }, this)
                    }, this)
                  }, Xe.isDisposed = function () {
                    return this._disposed
                  }, Xe.clear = function () {
                    this.setOption({
                      series: []
                    }, !0)
                  }, Xe[T] = function () {
                    if (!this._disposed) {
                      this._disposed = !0;
                      var t = this._api,
                        e = this._model;
                      ke(this._componentsViews, function (i) {
                        i[T](e, t)
                      }), ke(this._chartsViews, function (i) {
                        i[T](e, t)
                      }), this._zr[T](), delete ai[this.id]
                    }
                  }, xe.mixin(n, Me);
                  var Ke = {}, Qe = {}, Je = [], ti = [], ei = [], ii = [], ni = {}, ri = {}, ai = {}, oi = {}, si = new Date - 0, li = new Date - 0, ui = "_echarts_instance_", ci = {
                    version: "3.6.2",
                    dependencies: {
                      zrender: "3.5.2"
                    }
                  };
                  return ci.init = function (t, e, i) {
                    var r = ci.getInstanceByDom(t);
                    if (r) return r;
                    var a = new n(t, e, i);
                    return a.id = "ec_" + si++, ai[a.id] = a, t.setAttribute ? t.setAttribute(ui, a.id) : t[ui] = a.id, G(a), a
                  }, ci.connect = function (t) {
                    if (xe[y](t)) {
                      var e = t;
                      t = null, xe.each(e, function (e) {
                        null != e.group && (t = e.group)
                      }), t = t || "g_" + li++, xe.each(e, function (e) {
                        e.group = t
                      })
                    }
                    return oi[t] = !0, t
                  }, ci.disConnect = function (t) {
                    oi[t] = !1
                  }, ci.disconnect = ci.disConnect, ci[T] = function (t) {
                    typeof t === ue ? t = ai[t] : t instanceof n || (t = ci.getInstanceByDom(t)), t instanceof n && !t.isDisposed() && t[T]()
                  }, ci.getInstanceByDom = function (t) {
                    var e;
                    return e = t.getAttribute ? t.getAttribute(ui) : t[ui], ai[e]
                  }, ci.getInstanceById = function (t) {
                    return ai[t]
                  }, ci.registerTheme = function (t, e) {
                    ni[t] = e
                  }, ci.registerPreprocessor = function (t) {
                    ti.push(t)
                  }, ci.registerProcessor = function (t, e) {
                    typeof t === oe && (e = t, t = ze), Je.push({
                      prio: t,
                      func: e
                    })
                  }, ci.registerPostUpdate = function (t) {
                    ei.push(t)
                  }, ci.registerAction = function (t, e, i) {
                    typeof e === oe && (i = e, e = "");
                    var n = xe[ie](t) ? t.type : [t, t = {
                      event: e
                    }][0];
                    t.event = (t.event || n)[z](), e = t.event, xe.assert(je.test(n) && je.test(e)), Ke[n] || (Ke[n] = {
                      action: i,
                      actionInfo: t
                    }), Qe[e] = n
                  }, ci.registerCoordinateSystem = function (t, e) {
                    Y[j](t, e)
                  }, ci.getCoordinateSystemDimensions = function (t) {
                    var e = Y.get(t);
                    return e ? e.getDimensionsInfo ? e.getDimensionsInfo() : e[X].slice() : void 0
                  }, ci.registerLayout = function (t, e) {
                    typeof t === oe && (e = t, t = Be), ii.push({
                      prio: t,
                      func: e,
                      isLayout: !0
                    })
                  }, ci.registerVisual = function (t, e) {
                    typeof t === oe && (e = t, t = He), ii.push({
                      prio: t,
                      func: e
                    })
                  }, ci.registerLoading = function (t, e) {
                    ri[t] = e
                  }, ci.extendComponentModel = function (t) {
                    return J[ge](t)
                  }, ci.extendComponentView = function (t) {
                    return ee[ge](t)
                  }, ci.extendSeriesModel = function (t) {
                    return te[ge](t)
                  }, ci.extendChartView = function (t) {
                    return ne[ge](t)
                  }, ci.setCanvasCreator = function (t) {
                    xe.createCanvas = t
                  }, ci.registerVisual(Ve, t("./visual/seriesColor")), ci.registerPreprocessor(t("./preprocessor/backwardCompat")), ci.registerLoading("default", t("./loading/default")), ci.registerAction({
                    type: "highlight",
                    event: "highlight",
                    update: "highlight"
                  }, xe.noop), ci.registerAction({
                    type: "downplay",
                    event: "downplay",
                    update: "downplay"
                  }, xe.noop), ci.zrender = pe, ci.List = t("./data/List"), ci.Model = t("./model/Model"), ci.Axis = t("./coord/Axis"), ci.graphic = t("./util/graphic"), ci[le] = t("./util/number"), ci.format = t("./util/format"), ci.throttle = fe.throttle, ci.matrix = t("zrender/core/matrix"), ci.vector = t("zrender/core/vector"), ci.color = t("zrender/tool/color"), ci.util = {}, ke(["map", "each", de, ce, g, "reduce", de, "bind", "curry", y, v, ie, "isFunction", ge, Ee, "clone", "merge"], function (t) {
                    ci.util[t] = xe[t]
                  }), ci.helper = t("./helper"), ci.PRIORITY = {
                    PROCESSOR: {
                      FILTER: ze,
                      STATISTIC: De
                    },
                    VISUAL: {
                      LAYOUT: Be,
                      GLOBAL: Ve,
                      CHART: He,
                      COMPONENT: Ge,
                      BRUSH: qe
                    }
                  }, ci
                }), e("echarts/chart/line/LineSeries", [Ve, "../helper/createListFromArray", "../../model/Series"], function (t) {
                var e = t("../helper/createListFromArray"),
                  i = t("../../model/Series");
                return i[ge]({
                  type: "series.line",
                  dependencies: ["grid", "polar"],
                  getInitialData: function (t, i) {
                    return e(t.data, this, i)
                  },
                  defaultOption: {
                    zlevel: 0,
                    z: 2,
                    coordinateSystem: "cartesian2d",
                    legendHoverLink: !0,
                    hoverAnimation: !0,
                    clipOverflow: !0,
                    label: {
                      normal: {
                        position: "top"
                      }
                    },
                    lineStyle: {
                      normal: {
                        width: 2,
                        type: "solid"
                      }
                    },
                    step: !1,
                    smooth: !1,
                    smoothMonotone: null,
                    symbol: "emptyCircle",
                    symbolSize: 4,
                    symbolRotate: null,
                    showSymbol: !0,
                    showAllSymbol: !1,
                    connectNulls: !1,
                    sampling: "none",
                    animationEasing: "linear",
                    progressive: 0,
                    hoverLayerThreshold: 1 / 0
                  }
                })
              }), e("echarts/chart/line/LineView", [Ve, Fe, "../helper/SymbolDraw", "../helper/Symbol", "./lineAnimationDiff", Z, "../../util/model", "./poly", "../../view/Chart"], function (t) {
                function e(t, e) {
                  if (t[ve] === e[ve]) {
                    for (var i = 0; i < t[ve]; i++) {
                      var n = t[i],
                        r = e[i];
                      if (n[0] !== r[0] || n[1] !== r[1]) return
                    }
                    return !0
                  }
                }

                function i(t) {
                  return typeof t === le ? t : t ? .3 : 0
                }

                function n(t) {
                  var e = t.getGlobalExtent();
                  if (t.onBand) {
                    var i = t.getBandWidth() / 2 - 1,
                      n = e[1] > e[0] ? 1 : -1;
                    e[0] += n * i, e[1] -= n * i
                  }
                  return e
                }

                function r(t) {
                  return t >= 0 ? 1 : -1
                }

                function a(t, e) {
                  var i = t.getBaseAxis(),
                    n = t.getOtherAxis(i),
                    a = i.onZero ? 0 : n.scale[fe]()[0],
                    o = n.dim,
                    s = "x" === o || "radius" === o ? 1 : 0;
                  return e.mapArray([o], function (n, l) {
                    for (var u, c = e.stackedOn; c && r(c.get(o, l)) === r(n);) {
                      u = c;
                      break
                    }
                    var h = [];
                    return h[s] = e.get(i.dim, l), h[1 - s] = u ? u.get(o, l, !0) : a, t[ee](h)
                  }, !0)
                }

                function o(t, e, i) {
                  var r = n(t[ne]("x")),
                    a = n(t[ne]("y")),
                    o = t.getBaseAxis().isHorizontal(),
                    s = Math.min(r[0], r[1]),
                    l = Math.min(a[0], a[1]),
                    u = Math.max(r[0], r[1]) - s,
                    c = Math.max(a[0], a[1]) - l,
                    h = i.get("lineStyle.normal.width") || 2,
                    d = i.get("clipOverflow") ? h / 2 : Math.max(u, c);
                  o ? (l -= d, c += 2 * d) : (s -= d, u += 2 * d);
                  var f = new v.Rect({
                    shape: {
                      x: s,
                      y: l,
                      width: u,
                      height: c
                    }
                  });
                  return e && (f.shape[o ? "width" : Le] = 0, v.initProps(f, {
                    shape: {
                      width: u,
                      height: c
                    }
                  }, i)), f
                }

                function s(t, e, i) {
                  var n = t.getAngleAxis(),
                    r = t.getRadiusAxis(),
                    a = r[fe](),
                    o = n[fe](),
                    s = Math.PI / 180,
                    l = new v.Sector({
                      shape: {
                        cx: t.cx,
                        cy: t.cy,
                        r0: a[0],
                        r: a[1],
                        startAngle: -o[0] * s,
                        endAngle: -o[1] * s,
                        clockwise: n.inverse
                      }
                    });
                  return e && (l.shape.endAngle = -o[0] * s, v.initProps(l, {
                    shape: {
                      endAngle: -o[1] * s
                    }
                  }, i)), l
                }

                function l(t, e, i) {
                  return "polar" === t.type ? s(t, e, i) : o(t, e, i)
                }

                function u(t, e, i) {
                  for (var n = e.getBaseAxis(), r = "x" === n.dim || "radius" === n.dim ? 0 : 1, a = [], o = 0; o < t[ve] - 1; o++) {
                    var s = t[o + 1],
                      l = t[o];
                    a.push(l);
                    var u = [];
                    switch (i) {
                      case "end":
                        u[r] = s[r], u[1 - r] = l[1 - r], a.push(u);
                        break;
                      case Te:
                        var c = (l[r] + s[r]) / 2,
                          h = [];
                        u[r] = h[r] = c, u[1 - r] = l[1 - r], h[1 - r] = s[1 - r], a.push(u), a.push(h);
                        break;
                      default:
                        u[r] = l[r], u[1 - r] = s[1 - r], a.push(u)
                    }
                  }
                  return t[o] && a.push(t[o]), a
                }

                function c(t, e) {
                  var i = t.getVisual("visualMeta");
                  if (i && i[ve] && t.count()) {
                    for (var n, r = i[ve] - 1; r >= 0; r--)
                      if (i[r].dimension < 2) {
                        n = i[r];
                        break
                      } if (n && "cartesian2d" === e.type) {
                      var a = n.dimension,
                        o = t[X][a],
                        s = e[ne](o),
                        l = h.map(n.stops, function (t) {
                          return {
                            coord: s[te](s[J](t.value)),
                            color: t.color
                          }
                        }),
                        u = l[ve],
                        c = n.outerColors.slice();
                      u && l[0].coord > l[u - 1].coord && (l.reverse(), c.reverse());
                      var d = 10,
                        f = l[0].coord - d,
                        p = l[u - 1].coord + d,
                        m = p - f;
                      if (.001 > m) return L;
                      h.each(l, function (t) {
                        t[O] = (t.coord - f) / m
                      }), l.push({
                        offset: u ? l[u - 1][O] : .5,
                        color: c[1] || L
                      }), l.unshift({
                        offset: u ? l[0][O] : .5,
                        color: c[0] || L
                      });
                      var g = new v.LinearGradient(0, 0, 0, 0, l, !0);
                      return g[o] = f, g[o + "2"] = p, g
                    }
                  }
                }
                var h = t(Fe),
                  d = t("../helper/SymbolDraw"),
                  f = t("../helper/Symbol"),
                  p = t("./lineAnimationDiff"),
                  v = t(Z),
                  g = t("../../util/model"),
                  y = t("./poly"),
                  x = t("../../view/Chart");
                return x[ge]({
                  type: "line",
                  init: function () {
                    var t = new v.Group,
                      e = new d;
                    this.group.add(e.group), this._symbolDraw = e, this._lineGroup = t
                  },
                  render: function (t, n, r) {
                    var o = t[Re],
                      s = this.group,
                      d = t[Ne](),
                      f = t[Oe]("lineStyle.normal"),
                      p = t[Oe]("areaStyle.normal"),
                      m = d.mapArray(d.getItemLayout, !0),
                      v = "polar" === o.type,
                      g = this._coordSys,
                      y = this._symbolDraw,
                      x = this._polyline,
                      _ = this._polygon,
                      b = this._lineGroup,
                      w = t.get(H),
                      M = !p.isEmpty(),
                      T = a(o, d),
                      S = t.get("showSymbol"),
                      P = S && !v && !t.get("showAllSymbol") && this._getSymbolIgnoreFunc(d, o),
                      C = this._data;
                    C && C[V](function (t, e) {
                      t.__temp && (s[W](t), C.setItemGraphicEl(e, null))
                    }), S || y[W](), s.add(b);
                    var A = !v && t.get("step");
                    x && g.type === o.type && A === this._step ? (M && !_ ? _ = this._newPolygon(m, T, o, w) : _ && !M && (b[W](_), _ = this._polygon = null), b.setClipPath(l(o, !1, t)), S && y.updateData(d, P), d[V](function (t) {
                      t.stopAnimation(!0)
                    }), e(this._stackedOnPoints, T) && e(this._points, m) || (w ? this._updateAnimation(d, T, o, r, A) : (A && (m = u(m, o, A), T = u(T, o, A)), x.setShape({
                      points: m
                    }), _ && _.setShape({
                      points: m,
                      stackedOnPoints: T
                    })))) : (S && y.updateData(d, P), A && (m = u(m, o, A), T = u(T, o, A)), x = this._newPolyline(m, o, w), M && (_ = this._newPolygon(m, T, o, w)), b.setClipPath(l(o, !0, t)));
                    var L = c(d, o) || d.getVisual("color");
                    x.useStyle(h[Ee](f.getLineStyle(), {
                      fill: "none",
                      stroke: L,
                      lineJoin: "bevel"
                    }));
                    var k = t.get("smooth");
                    if (k = i(t.get("smooth")), x.setShape({
                        smooth: k,
                        smoothMonotone: t.get("smoothMonotone"),
                        connectNulls: t.get("connectNulls")
                      }), _) {
                      var I = d.stackedOn,
                        z = 0;
                      if (_.useStyle(h[Ee](p.getAreaStyle(), {
                          fill: L,
                          opacity: .7,
                          lineJoin: "bevel"
                        })), I) {
                        var D = I.hostModel;
                        z = i(D.get("smooth"))
                      }
                      _.setShape({
                        smooth: k,
                        stackedOnSmooth: z,
                        smoothMonotone: t.get("smoothMonotone"),
                        connectNulls: t.get("connectNulls")
                      })
                    }
                    this._data = d, this._coordSys = o, this._stackedOnPoints = T, this._points = m, this._step = A
                  },
                  dispose: function () {},
                  highlight: function (t, e, i, n) {
                    var r = t[Ne](),
                      a = g.queryDataIndex(r, n);
                    if (!(a instanceof Array) && null != a && a >= 0) {
                      var o = r[G](a);
                      if (!o) {
                        var s = r.getItemLayout(a);
                        if (!s) return;
                        o = new f(r, a), o[be] = s, o.setZ(t.get(_), t.get("z")), o[k] = isNaN(s[0]) || isNaN(s[1]), o.__temp = !0, r.setItemGraphicEl(a, o), o.stopSymbolAnimation(!0), this.group.add(o)
                      }
                      o.highlight()
                    } else x[ye].highlight.call(this, t, e, i, n)
                  },
                  downplay: function (t, e, i, n) {
                    var r = t[Ne](),
                      a = g.queryDataIndex(r, n);
                    if (null != a && a >= 0) {
                      var o = r[G](a);
                      o && (o.__temp ? (r.setItemGraphicEl(a, null), this.group[W](o)) : o.downplay())
                    } else x[ye].downplay.call(this, t, e, i, n)
                  },
                  _newPolyline: function (t) {
                    var e = this._polyline;
                    return e && this._lineGroup[W](e), e = new y.Polyline({
                      shape: {
                        points: t
                      },
                      silent: !0,
                      z2: 10
                    }), this._lineGroup.add(e), this._polyline = e, e
                  },
                  _newPolygon: function (t, e) {
                    var i = this._polygon;
                    return i && this._lineGroup[W](i), i = new y.Polygon({
                      shape: {
                        points: t,
                        stackedOnPoints: e
                      },
                      silent: !0
                    }), this._lineGroup.add(i), this._polygon = i, i
                  },
                  _getSymbolIgnoreFunc: function (t, e) {
                    var i = e.getAxesByScale(m)[0];
                    return i && i.isLabelIgnored ? h.bind(i.isLabelIgnored, i) : void 0
                  },
                  _updateAnimation: function (t, e, i, n, r) {
                    var a = this._polyline,
                      o = this._polygon,
                      s = t.hostModel,
                      l = p(this._data, t, this._stackedOnPoints, e, this._coordSys, i),
                      c = l.current,
                      h = l.stackedOnCurrent,
                      d = l.next,
                      f = l.stackedOnNext;
                    r && (c = u(l.current, i, r), h = u(l.stackedOnCurrent, i, r), d = u(l.next, i, r), f = u(l.stackedOnNext, i, r)), a.shape.__points = l.current, a.shape.points = c, v.updateProps(a, {
                      shape: {
                        points: d
                      }
                    }, s), o && (o.setShape({
                      points: c,
                      stackedOnPoints: h
                    }), v.updateProps(o, {
                      shape: {
                        points: d,
                        stackedOnPoints: f
                      }
                    }, s));
                    for (var m = [], g = l.status, y = 0; y < g[ve]; y++) {
                      var x = g[y].cmd;
                      if ("=" === x) {
                        var _ = t[G](g[y].idx1);
                        _ && m.push({
                          el: _,
                          ptIdx: y
                        })
                      }
                    }
                    a.animators && a.animators[ve] && a.animators[0].during(function () {
                      for (var t = 0; t < m[ve]; t++) {
                        var e = m[t].el;
                        e.attr(be, a.shape.__points[m[t].ptIdx])
                      }
                    })
                  },
                  remove: function () {
                    var t = this.group,
                      e = this._data;
                    this._lineGroup[Be](), this._symbolDraw[W](!0), e && e[V](function (i, n) {
                      i.__temp && (t[W](i), e.setItemGraphicEl(n, null))
                    }), this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null
                  }
                })
              }), e("echarts/visual/symbol", [Ve], function () {
                return function (t, e, i, n) {
                  n.eachRawSeriesByType(t, function (t) {
                    var r = t[Ne](),
                      a = t.get("symbol") || e,
                      o = t.get("symbolSize");
                    r.setVisual({
                      legendSymbol: i || a,
                      symbol: a,
                      symbolSize: o
                    }), n.isSeriesFiltered(t) || (typeof o === oe && r.each(function (e) {
                      var i = t.getRawValue(e),
                        n = t[w](e);
                      r.setItemVisual(e, "symbolSize", o(i, n))
                    }), r.each(function (t) {
                      var e = r[q](t),
                        i = e[R]("symbol", !0),
                        n = e[R]("symbolSize", !0);
                      null != i && r.setItemVisual(t, "symbol", i), null != n && r.setItemVisual(t, "symbolSize", n)
                    }))
                  })
                }
              }), e("echarts/layout/points", [Ve], function () {
                return function (t, e) {
                  e.eachSeriesByType(t, function (t) {
                    var e = t[Ne](),
                      i = t[Re];
                    if (i) {
                      for (var n = [], r = i[X], a = 0; a < r[ve]; a++) n.push(t[$](i[X][a])[0]);
                      1 === n[ve] ? e.each(n[0], function (t, n) {
                        e.setItemLayout(n, isNaN(t) ? [0 / 0, 0 / 0] : i[ee](t))
                      }) : 2 === n[ve] && e.each(n, function (t, n, r) {
                        e.setItemLayout(r, isNaN(t) || isNaN(n) ? [0 / 0, 0 / 0] : i[ee]([t, n]))
                      }, !0)
                    }
                  })
                }
              }), e("echarts/processor/dataSample", [], function () {
                var t = {
                    average: function (t) {
                      for (var e = 0, i = 0, n = 0; n < t[ve]; n++) isNaN(t[n]) || (e += t[n], i++);
                      return 0 === i ? 0 / 0 : e / i
                    },
                    sum: function (t) {
                      for (var e = 0, i = 0; i < t[ve]; i++) e += t[i] || 0;
                      return e
                    },
                    max: function (t) {
                      for (var e = -1 / 0, i = 0; i < t[ve]; i++) t[i] > e && (e = t[i]);
                      return e
                    },
                    min: function (t) {
                      for (var e = 1 / 0, i = 0; i < t[ve]; i++) t[i] < e && (e = t[i]);
                      return e
                    },
                    nearest: function (t) {
                      return t[0]
                    }
                  },
                  e = function (t) {
                    return Math.round(t[ve] / 2)
                  };
                return function (i, n) {
                  n.eachSeriesByType(i, function (i) {
                    var n = i[Ne](),
                      r = i.get("sampling"),
                      a = i[Re];
                    if ("cartesian2d" === a.type && r) {
                      var o = a.getBaseAxis(),
                        s = a.getOtherAxis(o),
                        l = o[fe](),
                        u = l[1] - l[0],
                        c = Math.round(n.count() / u);
                      if (c > 1) {
                        var h;
                        typeof r === ue ? h = t[r] : typeof r === oe && (h = r), h && (n = n.downSample(s.dim, 1 / c, h, e), i.setData(n))
                      }
                    }
                  }, this)
                }
              }), e("echarts/component/axis", [Ve, "../coord/cartesian/AxisModel", "./axis/CartesianAxisView"], function (t) {
                t("../coord/cartesian/AxisModel"), t("./axis/CartesianAxisView")
              }), e("echarts/util/graphic", [Ve, Fe, "zrender/tool/path", "zrender/graphic/Path", "zrender/tool/color", "zrender/core/matrix", "zrender/core/vector", "zrender/mixin/Transformable", "zrender/core/BoundingRect", "zrender/container/Group", "zrender/graphic/Image", "zrender/graphic/Text", "zrender/graphic/shape/Circle", "zrender/graphic/shape/Sector", "zrender/graphic/shape/Ring", "zrender/graphic/shape/Polygon", "zrender/graphic/shape/Polyline", "zrender/graphic/shape/Rect", "zrender/graphic/shape/Line", "zrender/graphic/shape/BezierCurve", "zrender/graphic/shape/Arc", "zrender/graphic/CompoundPath", "zrender/graphic/LinearGradient", "zrender/graphic/RadialGradient"], function (t) {
                function e(t) {
                  return null != t && "none" != t
                }

                function i(t) {
                  return typeof t === ue ? w.lift(t, -.1) : t
                }

                function n(t) {
                  if (t.__hoverStlDirty) {
                    var n = t.style[d],
                      r = t.style.fill,
                      a = t.__hoverStl;
                    a.fill = a.fill || (e(r) ? i(r) : null), a[d] = a[d] || (e(n) ? i(n) : null);
                    var o = {};
                    for (var s in a) a.hasOwnProperty(s) && (o[s] = t.style[s]);
                    t.__normalStl = o, t.__hoverStlDirty = !1
                  }
                }

                function r(t) {
                  t.__isHover || (n(t), t.useHoverLayer ? t.__zr && t.__zr.addHover(t, t.__hoverStl) : (t[_e](t.__hoverStl), t.z2 += 1), t.__isHover = !0)
                }

                function a(t) {
                  if (t.__isHover) {
                    var e = t.__normalStl;
                    t.useHoverLayer ? t.__zr && t.__zr.removeHover(t) : (e && t[_e](e), t.z2 -= 1), t.__isHover = !1
                  }
                }

                function o(t) {
                  "group" === t.type ? t[b](function (t) {
                    "group" !== t.type && r(t)
                  }) : r(t)
                }

                function s(t) {
                  "group" === t.type ? t[b](function (t) {
                    "group" !== t.type && a(t)
                  }) : a(t)
                }

                function l(t, e) {
                  t.__hoverStl = t.hoverStyle || e || {}, t.__hoverStlDirty = !0, t.__isHover && n(t)
                }

                function u(t) {
                  this.__hoverSilentOnTouch && t.zrByTouch || !this.__isEmphasis && o(this)
                }

                function c(t) {
                  this.__hoverSilentOnTouch && t.zrByTouch || !this.__isEmphasis && s(this)
                }

                function m() {
                  this.__isEmphasis = !0, o(this)
                }

                function v() {
                  this.__isEmphasis = !1, s(this)
                }

                function g(t, e, i, n, r, a) {
                  typeof r === oe && (a = r, r = null);
                  var o = n && n.isAnimationEnabled();
                  if (o) {
                    var s = t ? "Update" : "",
                      l = n[R]("animationDuration" + s),
                      u = n[R]("animationEasing" + s),
                      c = n[R]("animationDelay" + s);
                    typeof c === oe && (c = c(r, n.getAnimationDelayParams ? n.getAnimationDelayParams(e, r) : null)), typeof l === oe && (l = l(r)), l > 0 ? e.animateTo(i, l, c || 0, u, a) : (e.stopAnimation(), e.attr(i), a && a())
                  } else e.stopAnimation(), e.attr(i), a && a()
                }
                var y = t(Fe),
                  x = t("zrender/tool/path"),
                  _ = t("zrender/graphic/Path"),
                  w = t("zrender/tool/color"),
                  M = t("zrender/core/matrix"),
                  T = t("zrender/core/vector"),
                  S = t("zrender/mixin/Transformable"),
                  P = t("zrender/core/BoundingRect"),
                  C = Math.round,
                  A = Math.max,
                  L = Math.min,
                  k = {};
                return k.Group = t("zrender/container/Group"), k.Image = t("zrender/graphic/Image"), k.Text = t("zrender/graphic/Text"), k.Circle = t("zrender/graphic/shape/Circle"), k.Sector = t("zrender/graphic/shape/Sector"), k.Ring = t("zrender/graphic/shape/Ring"), k.Polygon = t("zrender/graphic/shape/Polygon"), k.Polyline = t("zrender/graphic/shape/Polyline"), k.Rect = t("zrender/graphic/shape/Rect"), k.Line = t("zrender/graphic/shape/Line"), k.BezierCurve = t("zrender/graphic/shape/BezierCurve"), k.Arc = t("zrender/graphic/shape/Arc"), k.CompoundPath = t("zrender/graphic/CompoundPath"), k.LinearGradient = t("zrender/graphic/LinearGradient"), k.RadialGradient = t("zrender/graphic/RadialGradient"), k.BoundingRect = P, k.extendShape = function (t) {
                  return _[ge](t)
                }, k.extendPath = function (t, e) {
                  return x.extendFromString(t, e)
                }, k.makePath = function (t, e, i, n) {
                  var r = x.createFromString(t, e),
                    a = r[ke]();
                  if (i) {
                    var o = a.width / a[Le];
                    if (n === Me) {
                      var s, l = i[Le] * o;
                      l <= i.width ? s = i[Le] : (l = i.width, s = l / o);
                      var u = i.x + i.width / 2,
                        c = i.y + i[Le] / 2;
                      i.x = u - l / 2, i.y = c - s / 2, i.width = l, i[Le] = s
                    }
                    k.resizePath(r, i)
                  }
                  return r
                }, k.mergePath = x.mergePath, k.resizePath = function (t, e) {
                  if (t[p]) {
                    var i = t[ke](),
                      n = i.calculateTransform(e);
                    t[p](n)
                  }
                }, k.subPixelOptimizeLine = function (t) {
                  var e = k.subPixelOptimize,
                    i = t.shape,
                    n = t.style[f];
                  return C(2 * i.x1) === C(2 * i.x2) && (i.x1 = i.x2 = e(i.x1, n, !0)), C(2 * i.y1) === C(2 * i.y2) && (i.y1 = i.y2 = e(i.y1, n, !0)), t
                }, k.subPixelOptimizeRect = function (t) {
                  var e = k.subPixelOptimize,
                    i = t.shape,
                    n = t.style[f],
                    r = i.x,
                    a = i.y,
                    o = i.width,
                    s = i[Le];
                  return i.x = e(i.x, n, !0), i.y = e(i.y, n, !0), i.width = Math.max(e(r + o, n, !1) - i.x, 0 === o ? 0 : 1), i[Le] = Math.max(e(a + s, n, !1) - i.y, 0 === s ? 0 : 1), t
                }, k.subPixelOptimize = function (t, e, i) {
                  var n = C(2 * t);
                  return (n + C(e)) % 2 === 0 ? n / 2 : (n + (i ? 1 : -1)) / 2
                }, k.setHoverStyle = function (t, e, i) {
                  t.__hoverSilentOnTouch = i && i.hoverSilentOnTouch, "group" === t.type ? t[b](function (t) {
                    "group" !== t.type && l(t, e)
                  }) : l(t, e), t.on("mouseover", u).on("mouseout", c), t.on("emphasis", m).on(U, v)
                }, k.setText = function (t, e, i) {
                  var n = e[R](be) || "inside",
                    r = e[R](O),
                    a = n[ce]("inside") >= 0 ? "white" : i,
                    o = e[Oe](De);
                  y[ge](t, {
                    textDistance: e[R]("distance") || 5,
                    textFont: o[Ie](),
                    textPosition: n,
                    textOffset: r,
                    textFill: o.getTextColor() || a
                  })
                }, k[Ie] = function (t, e) {
                  var i = e && e[Oe](De);
                  return [t.fontStyle || i && i[R]("fontStyle") || "", t.fontWeight || i && i[R]("fontWeight") || "", (t.fontSize || i && i[R]("fontSize") || 12) + "px", t.fontFamily || i && i[R]("fontFamily") || "sans-serif"].join(" ")
                }, k.updateProps = function (t, e, i, n, r) {
                  g(!0, t, e, i, n, r)
                }, k.initProps = function (t, e, i, n, r) {
                  g(!1, t, e, i, n, r)
                }, k.getTransform = function (t, e) {
                  for (var i = M.identity([]); t && t !== e;) M.mul(i, t.getLocalTransform(), i), t = t[N];
                  return i
                }, k[p] = function (t, e, i) {
                  return e && !y.isArrayLike(e) && (e = S.getLocalTransform(e)), i && (e = M.invert([], e)), T[p]([], t, e)
                }, k.transformDirection = function (t, e, i) {
                  var n = 0 === e[4] || 0 === e[5] || 0 === e[0] ? 1 : Math.abs(2 * e[4] / e[0]),
                    r = 0 === e[4] || 0 === e[5] || 0 === e[2] ? 1 : Math.abs(2 * e[4] / e[2]),
                    a = ["left" === t ? -n : "right" === t ? n : 0, "top" === t ? -r : t === we ? r : 0];
                  return a = k[p](a, e, i), Math.abs(a[0]) > Math.abs(a[1]) ? a[0] > 0 ? "right" : "left" : a[1] > 0 ? we : "top"
                }, k.groupTransition = function (t, e, i) {
                  function n(t) {
                    var e = {};
                    return t[b](function (t) {
                      !t.isGroup && t.anid && (e[t.anid] = t)
                    }), e
                  }

                  function r(t) {
                    var e = {
                      position: T.clone(t[be]),
                      rotation: t[h]
                    };
                    return t.shape && (e.shape = y[ge]({}, t.shape)), e
                  }
                  if (t && e) {
                    var a = n(t);
                    e[b](function (t) {
                      if (!t.isGroup && t.anid) {
                        var e = a[t.anid];
                        if (e) {
                          var n = r(t);
                          t.attr(r(e)), k.updateProps(t, n, i, t[F])
                        }
                      }
                    })
                  }
                }, k.clipPointsByRect = function (t, e) {
                  return y.map(t, function (t) {
                    var i = t[0];
                    i = A(i, e.x), i = L(i, e.x + e.width);
                    var n = t[1];
                    return n = A(n, e.y), n = L(n, e.y + e[Le]), [i, n]
                  })
                }, k.clipRectByRect = function (t, e) {
                  var i = A(t.x, e.x),
                    n = L(t.x + t.width, e.x + e.width),
                    r = A(t.y, e.y),
                    a = L(t.y + t[Le], e.y + e[Le]);
                  return n >= i && a >= r ? {
                    x: i,
                    y: r,
                    width: n - i,
                    height: a - r
                  } : void 0
                }, k
              }), e("echarts/component/legend/LegendModel", [Ve, Fe, "../../model/Model", "../../echarts"], function (t) {
                var e = t(Fe),
                  i = t("../../model/Model"),
                  n = t("../../echarts").extendComponentModel({
                    type: "legend",
                    dependencies: [C],
                    layoutMode: {
                      type: "box",
                      ignoreSize: !0
                    },
                    init: function (t, e, i) {
                      this.mergeDefaultAndTheme(t, i), t.selected = t.selected || {}
                    },
                    mergeOption: function (t) {
                      n.superCall(this, "mergeOption", t)
                    },
                    optionUpdated: function () {
                      this._updateData(this[pe]);
                      var t = this._data;
                      if (t[0] && "single" === this.get("selectedMode")) {
                        for (var e = !1, i = 0; i < t[ve]; i++) {
                          var n = t[i].get("name");
                          if (this.isSelected(n)) {
                            this.select(n), e = !0;
                            break
                          }
                        }!e && this.select(t[0].get("name"))
                      }
                    },
                    _updateData: function (t) {
                      var n = e.map(this.get("data") || [], function (t) {
                        return (typeof t === ue || typeof t === le) && (t = {
                          name: t
                        }), new i(t, this, this[pe])
                      }, this);
                      this._data = n;
                      var r = e.map(t.getSeries(), function (t) {
                        return t.name
                      });
                      t[K](function (t) {
                        if (t.legendDataProvider) {
                          var e = t.legendDataProvider();
                          r = r[se](e.mapArray(e.getName))
                        }
                      }), this._availableNames = r
                    },
                    getData: function () {
                      return this._data
                    },
                    select: function (t) {
                      var i = this[c].selected,
                        n = this.get("selectedMode");
                      if ("single" === n) {
                        var r = this._data;
                        e.each(r, function (t) {
                          i[t.get("name")] = !1
                        })
                      }
                      i[t] = !0
                    },
                    unSelect: function (t) {
                      "single" !== this.get("selectedMode") && (this[c].selected[t] = !1)
                    },
                    toggleSelected: function (t) {
                      var e = this[c].selected;
                      e.hasOwnProperty(t) || (e[t] = !0), this[e[t] ? "unSelect" : "select"](t)
                    },
                    isSelected: function (t) {
                      var i = this[c].selected;
                      return !(i.hasOwnProperty(t) && !i[t]) && e[ce](this._availableNames, t) >= 0
                    },
                    defaultOption: {
                      zlevel: 0,
                      z: 4,
                      show: !0,
                      orient: "horizontal",
                      left: "center",
                      top: "top",
                      align: "auto",
                      backgroundColor: "rgba(0,0,0,0)",
                      borderColor: "#ccc",
                      borderWidth: 0,
                      padding: 5,
                      itemGap: 10,
                      itemWidth: 25,
                      itemHeight: 14,
                      inactiveColor: "#ccc",
                      textStyle: {
                        color: "#333"
                      },
                      selectedMode: !0,
                      tooltip: {
                        show: !1
                      }
                    }
                  });
                return n
              }), e("echarts/component/legend/legendFilter", [], function () {
                return function (t) {
                  var e = t.findComponents({
                    mainType: "legend"
                  });
                  e && e[ve] && t.filterSeries(function (t) {
                    for (var i = 0; i < e[ve]; i++)
                      if (!e[i].isSelected(t.name)) return !1;
                    return !0
                  })
                }
              }), e("echarts/component/legend/legendAction", [Ve, "../../echarts", Fe], function (t) {
                function e(t, e, i) {
                  var r, a = {},
                    o = "toggleSelected" === t;
                  return i.eachComponent("legend", function (i) {
                    o && null != r ? i[r ? "select" : "unSelect"](e.name) : (i[t](e.name), r = i.isSelected(e.name));
                    var s = i[Ne]();
                    n.each(s, function (t) {
                      var e = t.get("name");
                      if ("\n" !== e && "" !== e) {
                        var n = i.isSelected(e);
                        a[e] = a.hasOwnProperty(e) ? a[e] && n : n
                      }
                    })
                  }), {
                    name: e.name,
                    selected: a
                  }
                }
                var i = t("../../echarts"),
                  n = t(Fe);
                i.registerAction("legendToggleSelect", "legendselectchanged", n.curry(e, "toggleSelected")), i.registerAction("legendSelect", "legendselected", n.curry(e, "select")), i.registerAction("legendUnSelect", "legendunselected", n.curry(e, "unSelect"))
              }), e("echarts/component/legend/LegendView", [Ve, Fe, "../../util/symbol", Z, "../helper/listComponent", "../../echarts"], function (t) {
                function e(t, e) {
                  e[P]({
                    type: "legendToggleSelect",
                    name: t
                  })
                }

                function i(t, e, i) {
                  var n = i.getZr().storage.getDisplayList()[0];
                  n && n.useHoverLayer || t.get("legendHoverLink") && i[P]({
                    type: "highlight",
                    seriesName: t.name,
                    name: e
                  })
                }

                function n(t, e, i) {
                  var n = i.getZr().storage.getDisplayList()[0];
                  n && n.useHoverLayer || t.get("legendHoverLink") && i[P]({
                    type: "downplay",
                    seriesName: t.name,
                    name: e
                  })
                }
                var r = t(Fe),
                  a = t("../../util/symbol"),
                  o = t(Z),
                  s = t("../helper/listComponent"),
                  l = r.curry;
                return t("../../echarts").extendComponentView({
                  type: "legend",
                  init: function () {
                    this._symbolTypeStore = {}
                  },
                  render: function (t, a, u) {
                    var c = this.group;
                    if (c[Be](), t.get("show")) {
                      var h = t.get("selectedMode"),
                        d = t.get("align");
                      "auto" === d && (d = "right" === t.get("left") && "vertical" === t.get("orient") ? "right" : "left");
                      var f = r.createHashMap();
                      r.each(t[Ne](), function (r) {
                        var s = r.get("name");
                        if ("" === s || "\n" === s) return void c.add(new o.Group({
                          newline: !0
                        }));
                        var p = a.getSeriesByName(s)[0];
                        if (!f.get(s))
                          if (p) {
                            var m = p[Ne](),
                              v = m.getVisual("color");
                            typeof v === oe && (v = v(p[w](0)));
                            var g = m.getVisual("legendSymbol") || "roundRect",
                              y = m.getVisual("symbol"),
                              x = this._createItem(s, r, t, g, y, d, v, h);
                            x.on("click", l(e, s, u)).on("mouseover", l(i, p, null, u)).on("mouseout", l(n, p, null, u)), f.set(s, !0)
                          } else a.eachRawSeries(function (a) {
                            if (!f.get(s) && a.legendDataProvider) {
                              var o = a.legendDataProvider(),
                                c = o.indexOfName(s);
                              if (0 > c) return;
                              var p = o[B](c, "color"),
                                m = "roundRect",
                                v = this._createItem(s, r, t, m, null, d, p, h);
                              v.on("click", l(e, s, u)).on("mouseover", l(i, a, s, u)).on("mouseout", l(n, a, s, u)), f.set(s, !0)
                            }
                          }, this)
                      }, this), s.layout(c, t, u), s.addBackground(c, t)
                    }
                  },
                  _createItem: function (t, e, i, n, s, l, u, h) {
                    var d = i.get("itemWidth"),
                      f = i.get("itemHeight"),
                      p = i.get("inactiveColor"),
                      m = i.isSelected(t),
                      v = new o.Group,
                      g = e[Oe](De),
                      y = e.get("icon"),
                      _ = e[Oe]("tooltip"),
                      b = _.parentModel;
                    if (n = y || n, v.add(a.createSymbol(n, 0, 0, d, f, m ? u : p)), !y && s && (s !== n || "none" == s)) {
                      var w = .8 * f;
                      "none" === s && (s = "circle"), v.add(a.createSymbol(s, (d - w) / 2, (f - w) / 2, w, w, m ? u : p))
                    }
                    var M = "left" === l ? d + 5 : -5,
                      T = l,
                      S = i.get("formatter"),
                      P = t;
                    typeof S === ue && S ? P = S[x]("{name}", null != t ? t : "") : typeof S === oe && (P = S(t));
                    var C = new o.Text({
                      style: {
                        text: P,
                        x: M,
                        y: f / 2,
                        fill: m ? g.getTextColor() : p,
                        textFont: g[Ie](),
                        textAlign: T,
                        textVerticalAlign: "middle"
                      }
                    });
                    v.add(C);
                    var A = new o.Rect({
                      shape: v[ke](),
                      invisible: !0,
                      tooltip: _.get("show") ? r[ge]({
                        content: t,
                        formatter: b.get("formatter", !0) || function () {
                          return t
                        },
                        formatterParams: {
                          componentType: "legend",
                          legendIndex: i[Q],
                          name: t,
                          $vars: ["name"]
                        }
                      }, _[c]) : null
                    });
                    return v.add(A), v.eachChild(function (t) {
                      t[Ae] = !0
                    }), A[Ae] = !h, this.group.add(v), o.setHoverStyle(v), v
                  }
                })
              }), e("echarts/util/layout", [Ve, Fe, "zrender/core/BoundingRect", "./number", "./format"], function (t) {
                function e(t, e, i, n, r) {
                  var a = 0,
                    o = 0;
                  null == n && (n = 1 / 0), null == r && (r = 1 / 0);
                  var s = 0;
                  e.eachChild(function (l, u) {
                    var c, h, d = l[be],
                      f = l[ke](),
                      p = e.childAt(u + 1),
                      m = p && p[ke]();
                    if ("horizontal" === t) {
                      var v = f.width + (m ? -m.x + f.x : 0);
                      c = a + v, c > n || l.newline ? (a = 0, c = v, o += s + i, s = f[Le]) : s = Math.max(s, f[Le])
                    } else {
                      var g = f[Le] + (m ? -m.y + f.y : 0);
                      h = o + g, h > r || l.newline ? (a += s + i, o = 0, h = g, s = f.width) : s = Math.max(s, f.width)
                    }
                    l.newline || (d[0] = a, d[1] = o, "horizontal" === t ? a = c + i : o = h + i)
                  })
                }
                var i = t(Fe),
                  n = t("zrender/core/BoundingRect"),
                  r = t("./number"),
                  a = t("./format"),
                  o = r.parsePercent,
                  s = i.each,
                  l = {},
                  u = l.LOCATION_PARAMS = ["left", "right", "top", we, "width", Le],
                  c = l.HV_NAMES = [
                    ["width", "left", "right"],
                    [Le, "top", we]
                  ];
                return l.box = e, l.vbox = i.curry(e, "vertical"), l.hbox = i.curry(e, "horizontal"), l.getAvailableSize = function (t, e, i) {
                  var n = e.width,
                    r = e[Le],
                    s = o(t.x, n),
                    l = o(t.y, r),
                    u = o(t.x2, n),
                    c = o(t.y2, r);
                  return (isNaN(s) || isNaN(parseFloat(t.x))) && (s = 0), (isNaN(u) || isNaN(parseFloat(t.x2))) && (u = n), (isNaN(l) || isNaN(parseFloat(t.y))) && (l = 0), (isNaN(c) || isNaN(parseFloat(t.y2))) && (c = r), i = a.normalizeCssArray(i || 0), {
                    width: Math.max(u - s - i[1] - i[3], 0),
                    height: Math.max(c - l - i[0] - i[2], 0)
                  }
                }, l.getLayoutRect = function (t, e, i) {
                  i = a.normalizeCssArray(i || 0);
                  var r = e.width,
                    s = e[Le],
                    l = o(t.left, r),
                    u = o(t.top, s),
                    c = o(t.right, r),
                    h = o(t[we], s),
                    d = o(t.width, r),
                    f = o(t[Le], s),
                    p = i[2] + i[0],
                    m = i[1] + i[3],
                    v = t.aspect;
                  switch (isNaN(d) && (d = r - c - m - l), isNaN(f) && (f = s - h - p - u), isNaN(d) && isNaN(f) && (v > r / s ? d = .8 * r : f = .8 * s), null != v && (isNaN(d) && (d = v * f), isNaN(f) && (f = d / v)), isNaN(l) && (l = r - c - d - m), isNaN(u) && (u = s - h - f - p), t.left || t.right) {
                    case Me:
                      l = r / 2 - d / 2 - i[3];
                      break;
                    case "right":
                      l = r - d - m
                  }
                  switch (t.top || t[we]) {
                    case Te:
                    case Me:
                      u = s / 2 - f / 2 - i[0];
                      break;
                    case we:
                      u = s - f - p
                  }
                  l = l || 0, u = u || 0, isNaN(d) && (d = r - l - (c || 0)), isNaN(f) && (f = s - u - (h || 0));
                  var g = new n(l + i[3], u + i[0], d, f);
                  return g.margin = i, g
                }, l.positionElement = function (t, e, r, a, o) {
                  var s = !o || !o.hv || o.hv[0],
                    u = !o || !o.hv || o.hv[1],
                    c = o && o.boundingMode || "all";
                  if (s || u) {
                    var h;
                    if ("raw" === c) h = "group" === t.type ? new n(0, 0, +e.width || 0, +e[Le] || 0) : t[ke]();
                    else if (h = t[ke](), t.needLocalTransform()) {
                      var d = t.getLocalTransform();
                      h = h.clone(), h[p](d)
                    }
                    e = l.getLayoutRect(i[Ee]({
                      width: h.width,
                      height: h[Le]
                    }, e), r, a);
                    var f = t[be],
                      m = s ? e.x - h.x : 0,
                      v = u ? e.y - h.y : 0;
                    t.attr(be, "raw" === c ? [m, v] : [f[0] + m, f[1] + v])
                  }
                }, l.sizeCalculable = function (t, e) {
                  return null != t[c[e][0]] || null != t[c[e][1]] && null != t[c[e][2]]
                }, l.mergeLayoutParam = function (t, e, n) {
                  function r(i, n) {
                    var r = {},
                      l = 0,
                      c = {},
                      h = 0,
                      d = 2;
                    if (s(i, function (e) {
                        c[e] = t[e]
                      }), s(i, function (t) {
                        a(e, t) && (r[t] = c[t] = e[t]), o(r, t) && l++, o(c, t) && h++
                      }), u[n]) return o(e, i[1]) ? c[i[2]] = null : o(e, i[2]) && (c[i[1]] = null), c;
                    if (h !== d && l) {
                      if (l >= d) return r;
                      for (var f = 0; f < i[ve]; f++) {
                        var p = i[f];
                        if (!a(r, p) && a(t, p)) {
                          r[p] = t[p];
                          break
                        }
                      }
                      return r
                    }
                    return c
                  }

                  function a(t, e) {
                    return t.hasOwnProperty(e)
                  }

                  function o(t, e) {
                    return null != t[e] && "auto" !== t[e]
                  }

                  function l(t, e, i) {
                    s(t, function (t) {
                      e[t] = i[t]
                    })
                  }!i[ie](n) && (n = {});
                  var u = n.ignoreSize;
                  !i[y](u) && (u = [u, u]);
                  var h = r(c[0], 0),
                    d = r(c[1], 1);
                  l(c[0], t, h), l(c[1], t, d)
                }, l.getLayoutParams = function (t) {
                  return l.copyLayoutParams({}, t)
                }, l.copyLayoutParams = function (t, e) {
                  return e && t && s(u, function (i) {
                    e.hasOwnProperty(i) && (t[i] = e[i])
                  }), t
                }, l
              }), e("echarts/component/axisPointer", [Ve, "../echarts", "./axisPointer/modelHelper", "./axisPointer/axisTrigger", Fe, "./axisPointer/AxisPointerModel", "./axisPointer/AxisPointerView", "./axisPointer/CartesianAxisPointer"], function (t) {
                var e = t("../echarts"),
                  i = t("./axisPointer/modelHelper"),
                  n = t("./axisPointer/axisTrigger"),
                  r = t(Fe);
                t("./axisPointer/AxisPointerModel"), t("./axisPointer/AxisPointerView"), t("./axisPointer/CartesianAxisPointer"), e.registerPreprocessor(function (t) {
                  if (t) {
                    (!t.axisPointer || 0 === t.axisPointer[ve]) && (t.axisPointer = {});
                    var e = t.axisPointer.link;
                    e && !r[y](e) && (t.axisPointer.link = [e])
                  }
                }), e.registerProcessor(e.PRIORITY.PROCESSOR.STATISTIC, function (t, e) {
                  t.getComponent("axisPointer").coordSysAxesInfo = i.collect(t, e)
                }), e.registerAction({
                  type: "updateAxisPointer",
                  event: "updateAxisPointer",
                  update: ":updateAxisPointer"
                }, n)
              }), e("echarts/component/tooltip/TooltipModel", [Ve, "../../echarts"], function (t) {
                t("../../echarts").extendComponentModel({
                  type: "tooltip",
                  dependencies: ["axisPointer"],
                  defaultOption: {
                    zlevel: 0,
                    z: 8,
                    show: !0,
                    showContent: !0,
                    trigger: "item",
                    triggerOn: "mousemove|click",
                    alwaysShowContent: !1,
                    displayMode: "single",
                    confine: !1,
                    showDelay: 0,
                    hideDelay: 100,
                    transitionDuration: .4,
                    enterable: !1,
                    backgroundColor: "rgba(50,50,50,0.7)",
                    borderColor: "#333",
                    borderRadius: 4,
                    borderWidth: 0,
                    padding: 5,
                    extraCssText: "",
                    axisPointer: {
                      type: "line",
                      axis: "auto",
                      animation: "auto",
                      animationDurationUpdate: 200,
                      animationEasingUpdate: "exponentialOut",
                      crossStyle: {
                        color: "#999",
                        width: 1,
                        type: "dashed",
                        textStyle: {}
                      }
                    },
                    textStyle: {
                      color: "#fff",
                      fontSize: 14
                    }
                  }
                })
              }), e("echarts/component/marker/MarkAreaModel", [Ve, "./MarkerModel"], function (t) {
                return t("./MarkerModel")[ge]({
                  type: "markArea",
                  defaultOption: {
                    zlevel: 0,
                    z: 1,
                    tooltip: {
                      trigger: "item"
                    },
                    animation: !1,
                    label: {
                      normal: {
                        show: !0,
                        position: "top"
                      },
                      emphasis: {
                        show: !0,
                        position: "top"
                      }
                    },
                    itemStyle: {
                      normal: {
                        borderWidth: 0
                      }
                    }
                  }
                })
              }), e("echarts/component/tooltip/TooltipView", [Ve, "./TooltipContent", Fe, "../../util/format", "../../util/number", Z, "../axisPointer/findPointFromSeries", "../../util/layout", D, "../../model/Model", "../axisPointer/globalListener", "../../coord/axisHelper", "../axisPointer/viewHelper", "../../echarts"], function (t) {
                function e(t) {
                  for (var e = t.pop(); t[ve];) {
                    var i = t.pop();
                    i && (i instanceof x && (i = i.get("tooltip", !0)), typeof i === ue && (i = {
                      formatter: i
                    }), e = new x(i, e, e[pe]))
                  }
                  return e
                }

                function i(t, e) {
                  return t[P] || c.bind(e[P], e)
                }

                function n(t, e, i, n, r, a, o) {
                  var s = i.clientWidth,
                    l = i.clientHeight;
                  return null != a && (t + s + a > n ? t -= s + a : t += a), null != o && (e + l + o > r ? e -= l + o : e += o), [t, e]
                }

                function r(t, e, i, n, r) {
                  var a = i.clientWidth,
                    o = i.clientHeight;
                  return t = Math.min(t + a, n) - a, e = Math.min(e + o, r) - o, t = Math.max(t, 0), e = Math.max(e, 0), [t, e]
                }

                function a(t, e, i) {
                  var n = i[0],
                    r = i[1],
                    a = 5,
                    o = 0,
                    s = 0,
                    l = e.width,
                    u = e[Le];
                  switch (t) {
                    case "inside":
                      o = e.x + l / 2 - n / 2, s = e.y + u / 2 - r / 2;
                      break;
                    case "top":
                      o = e.x + l / 2 - n / 2, s = e.y - r - a;
                      break;
                    case we:
                      o = e.x + l / 2 - n / 2, s = e.y + u + a;
                      break;
                    case "left":
                      o = e.x - n - a, s = e.y + u / 2 - r / 2;
                      break;
                    case "right":
                      o = e.x + l + a, s = e.y + u / 2 - r / 2
                  }
                  return [o, s]
                }

                function o(t) {
                  return t === Me || t === Te
                }
                var s = t("./TooltipContent"),
                  c = t(Fe),
                  h = t("../../util/format"),
                  d = t("../../util/number"),
                  f = t(Z),
                  m = t("../axisPointer/findPointFromSeries"),
                  v = t("../../util/layout"),
                  g = t(D),
                  x = t("../../model/Model"),
                  _ = t("../axisPointer/globalListener"),
                  b = t("../../coord/axisHelper"),
                  M = t("../axisPointer/viewHelper"),
                  T = c.bind,
                  C = c.each,
                  A = d.parsePercent,
                  L = new f.Rect({
                    shape: {
                      x: -1,
                      y: -1,
                      width: 2,
                      height: 2
                    }
                  });
                t("../../echarts").extendComponentView({
                  type: "tooltip",
                  init: function (t, e) {
                    if (!g.node) {
                      var i = new s(e.getDom(), e);
                      this._tooltipContent = i
                    }
                  },
                  render: function (t, e, i) {
                    if (!g.node) {
                      this.group[Be](), this._tooltipModel = t, this._ecModel = e, this._api = i, this._lastDataByCoordSys = null, this._alwaysShowContent = t.get("alwaysShowContent");
                      var n = this._tooltipContent;
                      n[ae](), n.setEnterable(t.get("enterable")), this._initGlobalListener(), this._keepShow()
                    }
                  },
                  _initGlobalListener: function () {
                    var t = this._tooltipModel,
                      e = t.get("triggerOn");
                    _[j]("itemTooltip", this._api, T(function (t, i, n) {
                      "none" !== e && (e[ce](t) >= 0 ? this._tryShow(i, n) : "leave" === t && this._hide(n))
                    }, this))
                  },
                  _keepShow: function () {
                    var t = this._tooltipModel,
                      e = this._ecModel,
                      i = this._api;
                    if (null != this._lastX && null != this._lastY && "none" !== t.get("triggerOn")) {
                      var n = this;
                      clearTimeout(this._refreshUpdateTimeout), this._refreshUpdateTimeout = setTimeout(function () {
                        n.manuallyShowTip(t, e, i, {
                          x: n._lastX,
                          y: n._lastY
                        })
                      })
                    }
                  },
                  manuallyShowTip: function (t, e, n, r) {
                    if (r.from !== this.uid && !g.node) {
                      var a = i(r, n);
                      this._ticket = "";
                      var o = r.dataByCoordSys;
                      if (r.tooltip && null != r.x && null != r.y) {
                        var s = L;
                        s[be] = [r.x, r.y], s[ae](), s.tooltip = r.tooltip, this._tryShow({
                          offsetX: r.x,
                          offsetY: r.y,
                          target: s
                        }, a)
                      } else if (o) this._tryShow({
                        offsetX: r.x,
                        offsetY: r.y,
                        position: r[be],
                        event: {},
                        dataByCoordSys: r.dataByCoordSys,
                        tooltipOption: r.tooltipOption
                      }, a);
                      else if (null != r[E]) {
                        if (this._manuallyAxisShowTip(t, e, n, r)) return;
                        var l = m(r, e),
                          u = l.point[0],
                          c = l.point[1];
                        null != u && null != c && this._tryShow({
                          offsetX: u,
                          offsetY: c,
                          position: r[be],
                          target: l.el,
                          event: {}
                        }, a)
                      } else null != r.x && null != r.y && (n[P]({
                        type: "updateAxisPointer",
                        x: r.x,
                        y: r.y
                      }), this._tryShow({
                        offsetX: r.x,
                        offsetY: r.y,
                        position: r[be],
                        target: n.getZr().findHover(r.x, r.y)[Ce],
                        event: {}
                      }, a))
                    }
                  },
                  manuallyHideTip: function (t, e, n, r) {
                    var a = this._tooltipContent;
                    this._alwaysShowContent || a.hideLater(this._tooltipModel.get("hideDelay")), this._lastX = this._lastY = null, r.from !== this.uid && this._hide(i(r, n))
                  },
                  _manuallyAxisShowTip: function (t, i, n, r) {
                    var a = r[E],
                      o = r[F],
                      s = i.getComponent("axisPointer").coordSysAxesInfo;
                    if (null != a && null != o && null != s) {
                      var l = i.getSeriesByIndex(a);
                      if (l) {
                        var u = l[Ne](),
                          t = e([u[q](o), l, (l[Re] || {}).model, t]);
                        if ("axis" === t.get(S)) return n[P]({
                          type: "updateAxisPointer",
                          seriesIndex: a,
                          dataIndex: o,
                          position: r[be]
                        }), !0
                      }
                    }
                  },
                  _tryShow: function (t, e) {
                    var i = t[Ce],
                      n = this._tooltipModel;
                    if (n) {
                      this._lastX = t.offsetX, this._lastY = t.offsetY;
                      var r = t.dataByCoordSys;
                      r && r[ve] ? this._showAxisTooltip(r, t) : i && null != i[F] ? (this._lastDataByCoordSys = null, this._showSeriesItemTooltip(t, i, e)) : i && i.tooltip ? (this._lastDataByCoordSys = null, this._showComponentItemTooltip(t, i, e)) : (this._lastDataByCoordSys = null, this._hide(e))
                    }
                  },
                  _showOrMove: function (t, e) {
                    var i = t.get("showDelay");
                    e = c.bind(e, this), clearTimeout(this._showTimout), i > 0 ? this._showTimout = setTimeout(e, i) : e()
                  },
                  _showAxisTooltip: function (t, i) {
                    var n = this._ecModel,
                      r = this._tooltipModel,
                      a = [i.offsetX, i.offsetY],
                      o = [],
                      s = [],
                      l = e([i.tooltipOption, r]);
                    C(t, function (t) {
                      C(t.dataByAxis, function (t) {
                        var e = n.getComponent(t.axisDim + "Axis", t.axisIndex),
                          i = t.value,
                          r = [];
                        if (e && null != i) {
                          var a = M.getValueLabel(i, e.axis, n, t.seriesDataIndices, t.valueLabelOpt);
                          c.each(t.seriesDataIndices, function (o) {
                            var l = n.getSeriesByIndex(o[E]),
                              u = o.dataIndexInside,
                              c = l && l[w](u);
                            c.axisDim = t.axisDim, c.axisIndex = t.axisIndex, c.axisType = t.axisType, c.axisId = t.axisId, c.axisValue = b.getAxisRawValue(e.axis, i), c.axisValueLabel = a, c && (s.push(c), r.push(l.formatTooltip(u, !0)))
                          });
                          var l = a;
                          o.push((l ? h.encodeHTML(l) + "<br />" : "") + r.join("<br />"))
                        }
                      })
                    }, this), o.reverse(), o = o.join("<br /><br />");
                    var u = i[be];
                    this._showOrMove(l, function () {
                      this._updateContentNotChangedOnAxis(t) ? this._updatePosition(l, u, a[0], a[1], this._tooltipContent, s) : this._showTooltipContent(l, o, s, Math.random(), a[0], a[1], u)
                    })
                  },
                  _showSeriesItemTooltip: function (t, i, n) {
                    var r = this._ecModel,
                      a = i[E],
                      o = r.getSeriesByIndex(a),
                      s = i.dataModel || o,
                      l = i[F],
                      u = i.dataType,
                      c = s[Ne](),
                      h = e([c[q](l), s, o && (o[Re] || {}).model, this._tooltipModel]),
                      d = h.get(S);
                    if (null == d || "item" === d) {
                      var f = s[w](l, u),
                        p = s.formatTooltip(l, !1, u),
                        m = "item_" + s.name + "_" + l;
                      this._showOrMove(h, function () {
                        this._showTooltipContent(h, p, f, m, t.offsetX, t.offsetY, t[be], t[Ce])
                      }), n({
                        type: "showTip",
                        dataIndexInside: l,
                        dataIndex: c.getRawIndex(l),
                        seriesIndex: a,
                        from: this.uid
                      })
                    }
                  },
                  _showComponentItemTooltip: function (t, e, i) {
                    var n = e.tooltip;
                    if (typeof n === ue) {
                      var r = n;
                      n = {
                        content: r,
                        formatter: r
                      }
                    }
                    var a = new x(n, this._tooltipModel, this._ecModel),
                      o = a.get("content"),
                      s = Math.random();
                    this._showOrMove(a, function () {
                      this._showTooltipContent(a, o, a.get("formatterParams") || {}, s, t.offsetX, t.offsetY, t[be], e)
                    }), i({
                      type: "showTip",
                      from: this.uid
                    })
                  },
                  _showTooltipContent: function (t, e, i, n, r, a, o, s) {
                    if (this._ticket = "", t.get("showContent") && t.get("show")) {
                      var l = this._tooltipContent,
                        u = t.get("formatter");
                      o = o || t.get(be);
                      var c = e;
                      if (u && typeof u === ue) c = h.formatTpl(u, i, !0);
                      else if (typeof u === oe) {
                        var d = T(function (e, n) {
                          e === this._ticket && (l.setContent(n), this._updatePosition(t, o, r, a, l, i, s))
                        }, this);
                        this._ticket = n, c = u(i, n, d)
                      }
                      l.setContent(c), l.show(t), this._updatePosition(t, o, r, a, l, i, s)
                    }
                  },
                  _updatePosition: function (t, e, i, s, h, d, f) {
                    var m = this._api[Pe](),
                      g = this._api[Se]();
                    e = e || t.get(be);
                    var x = h.getSize(),
                      _ = t.get("align"),
                      b = t.get("verticalAlign"),
                      w = f && f[ke]().clone();
                    if (f && w[p](f[u]), typeof e === oe && (e = e([i, s], d, h.el, w, {
                        viewSize: [m, g],
                        contentSize: x.slice()
                      })), c[y](e)) i = A(e[0], m), s = A(e[1], g);
                    else if (c[ie](e)) {
                      e.width = x[0], e[Le] = x[1];
                      var M = v.getLayoutRect(e, {
                        width: m,
                        height: g
                      });
                      i = M.x, s = M.y, _ = null, b = null
                    } else if (typeof e === ue && f) {
                      var T = a(e, w, x);
                      i = T[0], s = T[1]
                    } else {
                      var T = n(i, s, h.el, m, g, _ ? null : 20, b ? null : 20);
                      i = T[0], s = T[1]
                    }
                    if (_ && (i -= o(_) ? x[0] / 2 : "right" === _ ? x[0] : 0), b && (s -= o(b) ? x[1] / 2 : b === we ? x[1] : 0), t.get("confine")) {
                      var T = r(i, s, h.el, m, g);
                      i = T[0], s = T[1]
                    }
                    h[l](i, s)
                  },
                  _updateContentNotChangedOnAxis: function (t) {
                    var e = this._lastDataByCoordSys,
                      i = !!e && e[ve] === t[ve];
                    return i && C(e, function (e, n) {
                      var r = e.dataByAxis || {},
                        a = t[n] || {},
                        o = a.dataByAxis || [];
                      i &= r[ve] === o[ve], i && C(r, function (t, e) {
                        var n = o[e] || {},
                          r = t.seriesDataIndices || [],
                          a = n.seriesDataIndices || [];
                        i &= t.value === n.value && t.axisType === n.axisType && t.axisId === n.axisId && r[ve] === a[ve], i && C(r, function (t, e) {
                          var n = a[e];
                          i &= t[E] === n[E] && t[F] === n[F]
                        })
                      })
                    }), this._lastDataByCoordSys = t, !!i
                  },
                  _hide: function (t) {
                    this._lastDataByCoordSys = null, t({
                      type: "hideTip",
                      from: this.uid
                    })
                  },
                  dispose: function (t, e) {
                    g.node || (this._tooltipContent.hide(), _.unregister("itemTooltip", e))
                  }
                })
              }), e("echarts/component/marker/MarkAreaView", [Ve, Fe, "../../data/List", "../../util/number", Z, "zrender/tool/color", "./markerHelper", "./MarkerView"], function (t) {
                function e(t) {
                  return !isNaN(t) && !isFinite(t)
                }

                function i(t, i, n) {
                  var r = 1 - t;
                  return e(i[r]) && e(n[r])
                }

                function n(t, e) {
                  var n = e.coord[0],
                    r = e.coord[1];
                  return "cartesian2d" === t.type && n && r && (i(1, n, r, t) || i(0, n, r, t)) ? !0 : h.dataFilter(t, {
                    coord: n,
                    x: e.x0,
                    y: e.y0
                  }) || h.dataFilter(t, {
                    coord: r,
                    x: e.x1,
                    y: e.y1
                  })
                }

                function r(t, i, n, r, a) {
                  var o, s = r[Re],
                    u = t[q](i),
                    c = l.parsePercent(u.get(n[0]), a[Pe]()),
                    h = l.parsePercent(u.get(n[1]), a[Se]());
                  if (isNaN(c) || isNaN(h)) {
                    if (r.getMarkerPosition) o = r.getMarkerPosition(t.getValues(n, i));
                    else {
                      var d = t.get(n[0], i),
                        f = t.get(n[1], i);
                      o = s[ee]([d, f], !0)
                    }
                    if ("cartesian2d" === s.type) {
                      var p = s[ne]("x"),
                        m = s[ne]("y"),
                        d = t.get(n[0], i),
                        f = t.get(n[1], i);
                      e(d) ? o[0] = p[te](p[fe]()["x0" === n[0] ? 0 : 1]) : e(f) && (o[1] = m[te](m[fe]()["y0" === n[1] ? 0 : 1]))
                    }
                    isNaN(c) || (o[0] = c), isNaN(h) || (o[1] = h)
                  } else o = [c, h];
                  return o
                }

                function a(t, e, i) {
                  var r, a, l = ["x0", "y0", "x1", "y1"];
                  t ? (r = o.map(t && t[X], function (t) {
                    var i = e[Ne]().getDimensionInfo(e[$](t)[0]) || {};
                    return i.name = t, i
                  }), a = new s(o.map(l, function (t, e) {
                    return {
                      name: t,
                      type: r[e % 2].type
                    }
                  }), i)) : (r = [{
                    name: "value",
                    type: "float"
                  }], a = new s(r, i));
                  var u = o.map(i.get("data"), o.curry(d, e, t, i));
                  t && (u = o[de](u, o.curry(n, t)));
                  var c = t ? function (t, e, i, n) {
                    return t.coord[Math.floor(n / 2)][n % 2]
                  } : function (t) {
                    return t.value
                  };
                  return a.initData(u, null, c), a.hasItemOption = !0, a
                }
                var o = t(Fe),
                  s = t("../../data/List"),
                  l = t("../../util/number"),
                  u = t(Z),
                  c = t("zrender/tool/color"),
                  h = t("./markerHelper"),
                  d = function (t, e, i, n) {
                    var r = h.dataTransform(t, n[0]),
                      a = h.dataTransform(t, n[1]),
                      s = o[Y],
                      l = r.coord,
                      u = a.coord;
                    l[0] = s(l[0], -1 / 0), l[1] = s(l[1], -1 / 0), u[0] = s(u[0], 1 / 0), u[1] = s(u[1], 1 / 0);
                    var c = o.mergeAll([{}, r, a]);
                    return c.coord = [r.coord, a.coord], c.x0 = r.x, c.y0 = r.y, c.x1 = a.x, c.y1 = a.y, c
                  },
                  f = [
                    ["x0", "y0"],
                    ["x1", "y0"],
                    ["x1", "y1"],
                    ["x0", "y1"]
                  ];
                t("./MarkerView")[ge]({
                  type: "markArea",
                  updateLayout: function (t, e, i) {
                    e[K](function (t) {
                      var e = t.markAreaModel;
                      if (e) {
                        var n = e[Ne]();
                        n.each(function (e) {
                          var a = o.map(f, function (a) {
                            return r(n, e, a, t, i)
                          });
                          n.setItemLayout(e, a);
                          var s = n[G](e);
                          s.setShape("points", a)
                        })
                      }
                    }, this)
                  },
                  renderSeries: function (t, e, i, n) {
                    var s = t[Re],
                      l = t.name,
                      h = t[Ne](),
                      d = this.markerGroupMap,
                      p = d.get(l) || d.set(l, {
                        group: new u.Group
                      });
                    this.group.add(p.group), p.__keep = !0;
                    var m = a(s, t, e);
                    e.setData(m), m.each(function (e) {
                      m.setItemLayout(e, o.map(f, function (i) {
                        return r(m, e, i, t, n)
                      })), m.setItemVisual(e, {
                        color: h.getVisual("color")
                      })
                    }), m.diff(p.__data).add(function (t) {
                      var e = new u.Polygon({
                        shape: {
                          points: m.getItemLayout(t)
                        }
                      });
                      m.setItemGraphicEl(t, e), p.group.add(e)
                    })[ae](function (t, i) {
                      var n = p.__data[G](i);
                      u.updateProps(n, {
                        shape: {
                          points: m.getItemLayout(t)
                        }
                      }, e, t), p.group.add(n), m.setItemGraphicEl(t, n)
                    })[W](function (t) {
                      var e = p.__data[G](t);
                      p.group[W](e)
                    }).execute(), m[V](function (t, i) {
                      var n = m[q](i),
                        r = n[Oe]("label.normal"),
                        a = n[Oe]("label.emphasis"),
                        s = m[B](i, "color");
                      t.useStyle(o[Ee](n[Oe]("itemStyle.normal").getItemStyle(), {
                        fill: c.modifyAlpha(s, .4),
                        stroke: s
                      })), t.hoverStyle = n[Oe]("itemStyle.normal").getItemStyle();
                      var l = m.getName(i) || "",
                        h = s || t.style.fill;
                      r[R]("show") ? (u.setText(t.style, r, h), t.style.text = o[Y](e.getFormattedLabel(i, U), l)) : t.style.text = "", a[R]("show") ? (u.setText(t.hoverStyle, a, h), t.hoverStyle.text = o[Y](e.getFormattedLabel(i, "emphasis"), l)) : t.hoverStyle.text = "", u.setHoverStyle(t, {}), t.dataModel = e
                    }), p.__data = m, p.group[Ae] = e.get(Ae) || t.get(Ae)
                  }
                })
              }), e("echarts/util/number", [Ve, Fe], function (t) {
                function e(t) {
                  return t[x](/^\s+/, "")[x](/\s+$/, "")
                }

                function i(t) {
                  return Math.floor(Math.log(t) / Math.LN10)
                }
                var n = t(Fe),
                  r = {},
                  a = 1e-4;
                r.linearMap = function (t, e, i, n) {
                  var r = e[1] - e[0],
                    a = i[1] - i[0];
                  if (0 === r) return 0 === a ? i[0] : (i[0] + i[1]) / 2;
                  if (n)
                    if (r > 0) {
                      if (t <= e[0]) return i[0];
                      if (t >= e[1]) return i[1]
                    } else {
                      if (t >= e[0]) return i[0];
                      if (t <= e[1]) return i[1]
                    }
                  else {
                    if (t === e[0]) return i[0];
                    if (t === e[1]) return i[1]
                  }
                  return (t - e[0]) / r * a + i[0]
                }, r.parsePercent = function (t, i) {
                  switch (t) {
                    case Me:
                    case Te:
                      t = "50%";
                      break;
                    case "left":
                    case "top":
                      t = "0%";
                      break;
                    case "right":
                    case we:
                      t = "100%"
                  }
                  return typeof t === ue ? e(t).match(/%$/) ? parseFloat(t) / 100 * i : parseFloat(t) : null == t ? 0 / 0 : +t
                }, r.round = function (t, e, i) {
                  return null == e && (e = 10), e = Math.min(Math.max(0, e), 20), t = (+t).toFixed(e), i ? t : +t
                }, r.asc = function (t) {
                  return t.sort(function (t, e) {
                    return t - e
                  }), t
                }, r.getPrecision = function (t) {
                  if (t = +t, isNaN(t)) return 0;
                  for (var e = 1, i = 0; Math.round(t * e) / e !== t;) e *= 10, i++;
                  return i
                }, r.getPrecisionSafe = function (t) {
                  var e = t.toString(),
                    i = e[ce]("e");
                  if (i > 0) {
                    var n = +e.slice(i + 1);
                    return 0 > n ? -n : 0
                  }
                  var r = e[ce](".");
                  return 0 > r ? 0 : e[ve] - 1 - r
                }, r.getPixelPrecision = function (t, e) {
                  var i = Math.log,
                    n = Math.LN10,
                    r = Math.floor(i(t[1] - t[0]) / n),
                    a = Math.round(i(Math.abs(e[1] - e[0])) / n),
                    o = Math.min(Math.max(-r + a, 0), 20);
                  return isFinite(o) ? o : 20
                }, r.getPercentWithPrecision = function (t, e, i) {
                  if (!t[e]) return 0;
                  var r = n.reduce(t, function (t, e) {
                    return t + (isNaN(e) ? 0 : e)
                  }, 0);
                  if (0 === r) return 0;
                  for (var a = Math.pow(10, i), o = n.map(t, function (t) {
                      return (isNaN(t) ? 0 : t) / r * a * 100
                    }), s = 100 * a, l = n.map(o, function (t) {
                      return Math.floor(t)
                    }), u = n.reduce(l, function (t, e) {
                      return t + e
                    }, 0), c = n.map(o, function (t, e) {
                      return t - l[e]
                    }); s > u;) {
                    for (var h = Number.NEGATIVE_INFINITY, d = null, f = 0, p = c[ve]; p > f; ++f) c[f] > h && (h = c[f], d = f);
                    ++l[d], c[d] = 0, ++u
                  }
                  return l[e] / a
                }, r.MAX_SAFE_INTEGER = 9007199254740991, r.remRadian = function (t) {
                  var e = 2 * Math.PI;
                  return (t % e + e) % e
                }, r.isRadianAroundZero = function (t) {
                  return t > -a && a > t
                };
                var o = /^(?:(\d{4})(?:[-\/](\d{1,2})(?:[-\/](\d{1,2})(?:[T ](\d{1,2})(?::(\d\d)(?::(\d\d)(?:[.,](\d+))?)?)?(Z|[\+\-]\d\d:?\d\d)?)?)?)?)?$/;
                return r.getTimezoneOffset = function () {
                  return (new Date).getTimezoneOffset()
                }, r.parseDate = function (t) {
                  if (t instanceof Date) return t;
                  if (typeof t === ue) {
                    var e = o.exec(t);
                    if (!e) return new Date(0 / 0);
                    var i = r.getTimezoneOffset(),
                      n = e[8] ? "Z" === e[8].toUpperCase() ? i : 60 * +e[8].slice(0, 3) + i : 0;
                    return new Date(+e[1], +(e[2] || 1) - 1, +e[3] || 1, +e[4] || 0, +(e[5] || 0) - n, +e[6] || 0, +e[7] || 0)
                  }
                  return new Date(null == t ? 0 / 0 : Math.round(t))
                }, r.quantity = function (t) {
                  return Math.pow(10, i(t))
                }, r.nice = function (t, e) {
                  var n, r = i(t),
                    a = Math.pow(10, r),
                    o = t / a;
                  return n = e ? 1.5 > o ? 1 : 2.5 > o ? 2 : 4 > o ? 3 : 7 > o ? 5 : 10 : 1 > o ? 1 : 2 > o ? 2 : 3 > o ? 3 : 5 > o ? 5 : 10, t = n * a, r >= -20 ? +t.toFixed(0 > r ? -r : 0) : t
                }, r.reformIntervals = function (t) {
                  function e(t, i, n) {
                    return t.interval[n] < i.interval[n] || t.interval[n] === i.interval[n] && (t.close[n] - i.close[n] === (n ? -1 : 1) || !n && e(t, i, 1))
                  }
                  t.sort(function (t, i) {
                    return e(t, i, 0) ? -1 : 1
                  });
                  for (var i = -1 / 0, n = 1, r = 0; r < t[ve];) {
                    for (var a = t[r].interval, o = t[r].close, s = 0; 2 > s; s++) a[s] <= i && (a[s] = i, o[s] = s ? 1 : 1 - n), i = a[s], n = o[s];
                    a[0] === a[1] && o[0] * o[1] !== 1 ? t[M](r, 1) : r++
                  }
                  return t
                }, r.isNumeric = function (t) {
                  return t - parseFloat(t) >= 0
                }, r
              }), e("echarts/util/format", [Ve, Fe, "./number", "zrender/contain/text"], function (t) {
                var e = t(Fe),
                  i = t("./number"),
                  n = t("zrender/contain/text"),
                  r = {};
                r.addCommas = function (t) {
                  return isNaN(t) ? "-" : (t = (t + "").split("."), t[0][x](/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, "$1,") + (t[ve] > 1 ? "." + t[1] : ""))
                }, r.toCamelCase = function (t, e) {
                  return t = (t || "")[z]()[x](/-(.)/g, function (t, e) {
                    return e.toUpperCase()
                  }), e && t && (t = t.charAt(0).toUpperCase() + t.slice(1)), t
                }, r.normalizeCssArray = function (t) {
                  var e = t[ve];
                  return typeof t === le ? [t, t, t, t] : 2 === e ? [t[0], t[1], t[0], t[1]] : 3 === e ? [t[0], t[1], t[2], t[1]] : t
                };
                var a = r.encodeHTML = function (t) {
                    return String(t)[x](/&/g, "&amp;")[x](/</g, "&lt;")[x](/>/g, "&gt;")[x](/"/g, "&quot;")[x](/'/g, "&#39;")
                  },
                  o = ["a", "b", "c", "d", "e", "f", "g"],
                  s = function (t, e) {
                    return "{" + t + (null == e ? "" : e) + "}"
                  };
                r.formatTpl = function (t, i, n) {
                  e[y](i) || (i = [i]);
                  var r = i[ve];
                  if (!r) return "";
                  for (var l = i[0].$vars || [], u = 0; u < l[ve]; u++) {
                    var c = o[u],
                      h = s(c, 0);
                    t = t[x](s(c), n ? a(h) : h)
                  }
                  for (var d = 0; r > d; d++)
                    for (var f = 0; f < l[ve]; f++) {
                      var h = i[d][l[f]];
                      t = t[x](s(o[f], d), n ? a(h) : h)
                    }
                  return t
                }, r.formatTplSimple = function (t, i, n) {
                  return e.each(i, function (e, i) {
                    t = t[x]("{" + i + "}", n ? a(e) : e)
                  }), t
                }, r.getTooltipMarker = function (t, e) {
                  return t ? '<span style="display:inline-block;margin-right:5px;border-radius:10px;width:9px;height:9px;background-color:' + r.encodeHTML(t) + ";" + (e || "") + '"></span>' : ""
                };
                var l = function (t) {
                  return 10 > t ? "0" + t : t
                };
                return r.formatTime = function (t, e, n) {
                  ("week" === t || "month" === t || "quarter" === t || "half-year" === t || "year" === t) && (t = "MM-dd\nyyyy");
                  var r = i.parseDate(e),
                    a = n ? "UTC" : "",
                    o = r["get" + a + "FullYear"](),
                    s = r["get" + a + "Month"]() + 1,
                    u = r["get" + a + "Date"](),
                    c = r["get" + a + "Hours"](),
                    h = r["get" + a + "Minutes"](),
                    d = r["get" + a + "Seconds"]();
                  return t = t[x]("MM", l(s))[z]()[x]("yyyy", o)[x]("yy", o % 100)[x]("dd", l(u))[x]("d", u)[x]("hh", l(c))[x]("h", c)[x]("mm", l(h))[x]("m", h)[x]("ss", l(d))[x]("s", d)
                }, r.capitalFirst = function (t) {
                  return t ? t.charAt(0).toUpperCase() + t.substr(1) : t
                }, r.truncateText = n.truncateText, r
              }), e("zrender/zrender", [Ve, "./core/guid", "./core/env", "./core/util", "./Handler", "./Storage", "./animation/Animation", "./dom/HandlerProxy", "./Painter"], function (t) {
                function e(t) {
                  delete h[t]
                }
                var i = t("./core/guid"),
                  n = t("./core/env"),
                  r = t("./core/util"),
                  a = t("./Handler"),
                  o = t("./Storage"),
                  s = t("./animation/Animation"),
                  l = t("./dom/HandlerProxy"),
                  u = !n[I],
                  c = {
                    canvas: t("./Painter")
                  },
                  h = {},
                  d = {};
                d.version = "3.5.2", d.init = function (t, e) {
                  var n = new f(i(), t, e);
                  return h[n.id] = n, n
                }, d[T] = function (t) {
                  if (t) t[T]();
                  else {
                    for (var e in h) h.hasOwnProperty(e) && h[e][T]();
                    h = {}
                  }
                  return d
                }, d.getInstance = function (t) {
                  return h[t]
                }, d.registerPainter = function (t, e) {
                  c[t] = e
                };
                var f = function (t, e, i) {
                  i = i || {}, this.dom = e, this.id = t;
                  var h = this,
                    d = new o,
                    f = i.renderer;
                  if (u) {
                    if (!c.vml) throw new Error("You need to require 'zrender/vml/vml' to support IE8");
                    f = "vml"
                  } else f && c[f] || (f = "canvas");
                  var p = new c[f](e, d, i);
                  this.storage = d, this.painter = p;
                  var m = n.node ? null : new l(p.getViewportRoot());
                  this.handler = new a(d, p, m, p.root), this[H] = new s({
                    stage: {
                      update: r.bind(this.flush, this)
                    }
                  }), this[H].start(), this._needsRefresh;
                  var v = d.delFromStorage,
                    g = d.addToStorage;
                  d.delFromStorage = function (t) {
                    v.call(d, t), t && t.removeSelfFromZr(h)
                  }, d.addToStorage = function (t) {
                    g.call(d, t), t.addSelfToZr(h)
                  }
                };
                return f[ye] = {
                  constructor: f,
                  getId: function () {
                    return this.id
                  },
                  add: function (t) {
                    this.storage.addRoot(t), this._needsRefresh = !0
                  },
                  remove: function (t) {
                    this.storage.delRoot(t), this._needsRefresh = !0
                  },
                  configLayer: function (t, e) {
                    this.painter.configLayer(t, e), this._needsRefresh = !0
                  },
                  refreshImmediately: function () {
                    this._needsRefresh = !1, this.painter.refresh(), this._needsRefresh = !1
                  },
                  refresh: function () {
                    this._needsRefresh = !0
                  },
                  flush: function () {
                    this._needsRefresh && this.refreshImmediately(), this._needsRefreshHover && this.refreshHoverImmediately()
                  },
                  addHover: function (t, e) {
                    this.painter.addHover && (this.painter.addHover(t, e), this.refreshHover())
                  },
                  removeHover: function (t) {
                    this.painter.removeHover && (this.painter.removeHover(t), this.refreshHover())
                  },
                  clearHover: function () {
                    this.painter.clearHover && (this.painter.clearHover(), this.refreshHover())
                  },
                  refreshHover: function () {
                    this._needsRefreshHover = !0
                  },
                  refreshHoverImmediately: function () {
                    this._needsRefreshHover = !1, this.painter.refreshHover && this.painter.refreshHover()
                  },
                  resize: function (t) {
                    t = t || {}, this.painter.resize(t.width, t[Le]), this.handler.resize()
                  },
                  clearAnimation: function () {
                    this[H].clear()
                  },
                  getWidth: function () {
                    return this.painter[Pe]()
                  },
                  getHeight: function () {
                    return this.painter[Se]()
                  },
                  pathToImage: function (t, e) {
                    return this.painter.pathToImage(t, e)
                  },
                  setCursorStyle: function (t) {
                    this.handler.setCursorStyle(t)
                  },
                  findHover: function (t, e) {
                    return this.handler.findHover(t, e)
                  },
                  on: function (t, e, i) {
                    this.handler.on(t, e, i)
                  },
                  off: function (t, e) {
                    this.handler.off(t, e)
                  },
                  trigger: function (t, e) {
                    this.handler[S](t, e)
                  },
                  clear: function () {
                    this.storage.delRoot(), this.painter.clear()
                  },
                  dispose: function () {
                    this[H].stop(), this.clear(), this.storage[T](), this.painter[T](), this.handler[T](), this[H] = this.storage = this.painter = this.handler = null, e(this.id)
                  }
                }, d
              }), e("zrender/vml/Painter", [Ve, "../core/log", "./core"], function (t) {
                function e(t) {
                  return parseInt(t, 10)
                }

                function i(t, e) {
                  a.initVML(), this.root = t, this.storage = e;
                  var i = document[he]("div"),
                    n = document[he]("div");
                  i.style.cssText = "display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;", n.style.cssText = "position:absolute;left:0;top:0;", t.appendChild(i), this._vmlRoot = n, this._vmlViewport = i, this.resize();
                  var r = e.delFromStorage,
                    o = e.addToStorage;
                  e.delFromStorage = function (t) {
                    r.call(e, t), t && t.onRemove && t.onRemove(n)
                  }, e.addToStorage = function (t) {
                    t.onAdd && t.onAdd(n), o.call(e, t)
                  }, this._firstPaint = !0
                }

                function n(t) {
                  return function () {
                    r('In IE8.0 VML mode painter not support method "' + t + '"')
                  }
                }
                var r = t("../core/log"),
                  a = t("./core");
                i[ye] = {
                  constructor: i,
                  getViewportRoot: function () {
                    return this._vmlViewport
                  },
                  refresh: function () {
                    var t = this.storage.getDisplayList(!0, !0);
                    this._paintList(t)
                  },
                  _paintList: function (t) {
                    for (var e = this._vmlRoot, i = 0; i < t[ve]; i++) {
                      var n = t[i];
                      n.invisible || n[k] ? (n.__alreadyNotVisible || n.onRemove(e), n.__alreadyNotVisible = !0) : (n.__alreadyNotVisible && n.onAdd(e), n.__alreadyNotVisible = !1, n[s] && (n.beforeBrush && n.beforeBrush(), (n.brushVML || n.brush).call(n, e), n.afterBrush && n.afterBrush())), n[s] = !1
                    }
                    this._firstPaint && (this._vmlViewport.appendChild(e), this._firstPaint = !1)
                  },
                  resize: function (t, e) {
                    var t = null == t ? this._getWidth() : t,
                      e = null == e ? this._getHeight() : e;
                    if (this._width != t || this._height != e) {
                      this._width = t, this._height = e;
                      var i = this._vmlViewport.style;
                      i.width = t + "px", i[Le] = e + "px"
                    }
                  },
                  dispose: function () {
                    this.root.innerHTML = "", this._vmlRoot = this._vmlViewport = this.storage = null
                  },
                  getWidth: function () {
                    return this._width
                  },
                  getHeight: function () {
                    return this._height
                  },
                  clear: function () {
                    this._vmlViewport && this.root.removeChild(this._vmlViewport)
                  },
                  _getWidth: function () {
                    var t = this.root,
                      i = t.currentStyle;
                    return (t.clientWidth || e(i.width)) - e(i.paddingLeft) - e(i.paddingRight) | 0
                  },
                  _getHeight: function () {
                    var t = this.root,
                      i = t.currentStyle;
                    return (t.clientHeight || e(i[Le])) - e(i.paddingTop) - e(i.paddingBottom) | 0
                  }
                };
                for (var o = ["getLayer", "insertLayer", "eachLayer", "eachBuiltinLayer", "eachOtherLayer", "getLayers", "modLayer", "delLayer", "clearLayer", "toDataURL", "pathToImage"], l = 0; l < o[ve]; l++) {
                  var u = o[l];
                  i[ye][u] = n(u)
                }
                return i
              }), e("echarts/scale/helper", [Ve, "../util/number"], function (t) {
                function e(t, e, i) {
                  t[e] = Math.max(Math.min(t[e], i[1]), i[0])
                }
                var i = t("../util/number"),
                  n = i.round,
                  r = {};
                return r.intervalScaleNiceTicks = function (t, e, a) {
                  var o = {},
                    s = t[1] - t[0],
                    l = o.interval = i.nice(s / e, !0);
                  null != a && a > l && (l = o.interval = a);
                  var u = o.intervalPrecision = r.getIntervalPrecision(l),
                    c = o.niceTickExtent = [n(Math.ceil(t[0] / l) * l, u), n(Math.floor(t[1] / l) * l, u)];
                  return r.fixExtent(c, t), o
                }, r.getIntervalPrecision = function (t) {
                  return i.getPrecisionSafe(t) + 2
                }, r.fixExtent = function (t, i) {
                  !isFinite(t[0]) && (t[0] = i[0]), !isFinite(t[1]) && (t[1] = i[1]), e(t, 0, i), e(t, 1, i), t[0] > t[1] && (t[0] = t[1])
                }, r.intervalScaleGetTicks = function (t, e, i, r) {
                  var a = [];
                  if (!t) return a;
                  var o = 1e4;
                  e[0] < i[0] && a.push(e[0]);
                  for (var s = i[0]; s <= i[1] && (a.push(s), s = n(s + t, r), s !== a[a[ve] - 1]);)
                    if (a[ve] > o) return [];
                  return e[1] > (a[ve] ? a[a[ve] - 1] : i[1]) && a.push(e[1]), a
                }, r
              }), e("echarts/scale/Interval", [Ve, "../util/number", "../util/format", "./Scale", "./helper"], function (t) {
                var e = t("../util/number"),
                  i = t("../util/format"),
                  n = t("./Scale"),
                  r = t("./helper"),
                  a = e.round,
                  o = n[ge]({
                    type: "interval",
                    _interval: 0,
                    _intervalPrecision: 2,
                    setExtent: function (t, e) {
                      var i = this._extent;
                      isNaN(t) || (i[0] = parseFloat(t)), isNaN(e) || (i[1] = parseFloat(e))
                    },
                    unionExtent: function (t) {
                      var e = this._extent;
                      t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1]), o[ye].setExtent.call(this, e[0], e[1])
                    },
                    getInterval: function () {
                      return this._interval
                    },
                    setInterval: function (t) {
                      this._interval = t, this._niceExtent = this._extent.slice(), this._intervalPrecision = r.getIntervalPrecision(t)
                    },
                    getTicks: function () {
                      return r.intervalScaleGetTicks(this._interval, this._extent, this._niceExtent, this._intervalPrecision)
                    },
                    getTicksLabels: function () {
                      for (var t = [], e = this.getTicks(), i = 0; i < e[ve]; i++) t.push(this.getLabel(e[i]));
                      return t
                    },
                    getLabel: function (t, n) {
                      if (null == t) return "";
                      var r = n && n.precision;
                      return null == r ? r = e.getPrecisionSafe(t) || 0 : "auto" === r && (r = this._intervalPrecision), t = a(t, r, !0), i.addCommas(t)
                    },
                    niceTicks: function (t, e) {
                      t = t || 5;
                      var i = this._extent,
                        n = i[1] - i[0];
                      if (isFinite(n)) {
                        0 > n && (n = -n, i.reverse());
                        var a = r.intervalScaleNiceTicks(i, t, e);
                        this._intervalPrecision = a.intervalPrecision, this._interval = a.interval, this._niceExtent = a.niceTickExtent
                      }
                    },
                    niceExtent: function (t) {
                      var e = this._extent;
                      if (e[0] === e[1])
                        if (0 !== e[0]) {
                          var i = e[0];
                          t.fixMax ? e[0] -= i / 2 : (e[1] += i / 2, e[0] -= i / 2)
                        } else e[1] = 1;
                      var n = e[1] - e[0];
                      isFinite(n) || (e[0] = 0, e[1] = 1), this.niceTicks(t.splitNumber, t.minInterval);
                      var r = this._interval;
                      t.fixMin || (e[0] = a(Math.floor(e[0] / r) * r)), t.fixMax || (e[1] = a(Math.ceil(e[1] / r) * r))
                    }
                  });
                return o[me] = function () {
                  return new o
                }, o
              }), e("echarts/scale/Scale", [Ve, "../util/clazz"], function (t) {
                function e(t) {
                  this._setting = t || {}, this._extent = [1 / 0, -1 / 0], this._interval = 0, this.init && this.init.apply(this, arguments)
                }
                var i = t("../util/clazz"),
                  n = e[ye];
                return n.parse = function (t) {
                  return t
                }, n.getSetting = function (t) {
                  return this._setting[t]
                }, n.contain = function (t) {
                  var e = this._extent;
                  return t >= e[0] && t <= e[1]
                }, n.normalize = function (t) {
                  var e = this._extent;
                  return e[1] === e[0] ? .5 : (t - e[0]) / (e[1] - e[0])
                }, n.scale = function (t) {
                  var e = this._extent;
                  return t * (e[1] - e[0]) + e[0]
                }, n.unionExtent = function (t) {
                  var e = this._extent;
                  t[0] < e[0] && (e[0] = t[0]), t[1] > e[1] && (e[1] = t[1])
                }, n.unionExtentFromData = function (t, e) {
                  this.unionExtent(t.getDataExtent(e, !0))
                }, n[fe] = function () {
                  return this._extent.slice()
                }, n.setExtent = function (t, e) {
                  var i = this._extent;
                  isNaN(t) || (i[0] = t), isNaN(e) || (i[1] = e)
                }, n.getTicksLabels = function () {
                  for (var t = [], e = this.getTicks(), i = 0; i < e[ve]; i++) t.push(this.getLabel(e[i]));
                  return t
                }, n.isBlank = function () {
                  return this._isBlank
                }, n.setBlank = function (t) {
                  this._isBlank = t
                }, i.enableClassExtend(e), i.enableClassManagement(e, {
                  registerWhenExtend: !0
                }), e
              }), e("echarts/coord/axisHelper", [Ve, "../scale/Ordinal", "../scale/Interval", "../scale/Time", "../scale/Log", "../scale/Scale", "../util/number", Fe, "zrender/contain/text"], function (t) {
                var e = t("../scale/Ordinal"),
                  i = t("../scale/Interval");
                t("../scale/Time"), t("../scale/Log");
                var n = t("../scale/Scale"),
                  r = t("../util/number"),
                  a = t(Fe),
                  o = t("zrender/contain/text"),
                  s = {};
                return s.getScaleExtent = function (t, e) {
                  var i, n, o, s = t.type,
                    l = e.getMin(),
                    u = e.getMax(),
                    c = null != l,
                    h = null != u,
                    d = t[fe]();
                  return s === m ? i = (e.get("data") || [])[ve] : (n = e.get("boundaryGap"), a[y](n) || (n = [n || 0, n || 0]), "boolean" == typeof n[0] && (n = [0, 0]), n[0] = r.parsePercent(n[0], 1), n[1] = r.parsePercent(n[1], 1), o = d[1] - d[0] || Math.abs(d[0])), null == l && (l = s === m ? i ? 0 : 0 / 0 : d[0] - n[0] * o), null == u && (u = s === m ? i ? i - 1 : 0 / 0 : d[1] + n[1] * o), "dataMin" === l && (l = d[0]), "dataMax" === u && (u = d[1]), (null == l || !isFinite(l)) && (l = 0 / 0), (null == u || !isFinite(u)) && (u = 0 / 0), t.setBlank(a.eqNaN(l) || a.eqNaN(u)), e.getNeedCrossZero() && (l > 0 && u > 0 && !c && (l = 0), 0 > l && 0 > u && !h && (u = 0)), [l, u]
                }, s.niceScaleExtent = function (t, e) {
                  var i = s.getScaleExtent(t, e),
                    n = null != e.getMin(),
                    r = null != e.getMax(),
                    a = e.get("splitNumber");
                  "log" === t.type && (t.base = e.get("logBase")), t.setExtent(i[0], i[1]), t.niceExtent({
                    splitNumber: a,
                    fixMin: n,
                    fixMax: r,
                    minInterval: "interval" === t.type ? e.get("minInterval") : null
                  });
                  var o = e.get("interval");
                  null != o && t.setInterval && t.setInterval(o)
                }, s.createScaleByModel = function (t, r) {
                  if (r = r || t.get("type")) switch (r) {
                    case re:
                      return new e(t.getCategories(), [1 / 0, -1 / 0]);
                    case "value":
                      return new i;
                    default:
                      return (n.getClass(r) || i)[me](t)
                  }
                }, s.ifAxisCrossZero = function (t) {
                  var e = t.scale[fe](),
                    i = e[0],
                    n = e[1];
                  return !(i > 0 && n > 0 || 0 > i && 0 > n)
                }, s.getAxisLabelInterval = function (t, e, i, n) {
                  var r, a = 0,
                    s = 0,
                    l = 1;
                  e[ve] > 40 && (l = Math.floor(e[ve] / 40));
                  for (var u = 0; u < t[ve]; u += l) {
                    var c = t[u],
                      h = o[ke](e[u], i, Me, "top");
                    h[n ? "x" : "y"] += c, h[n ? "width" : Le] *= 1.3, r ? r.intersect(h) ? (s++, a = Math.max(a, s)) : (r.union(h), s = 0) : r = h.clone()
                  }
                  return 0 === a && l > 1 ? l : (a + 1) * l - 1
                }, s.getFormattedLabels = function (t, e) {
                  var i = t.scale,
                    n = i.getTicksLabels(),
                    r = i.getTicks();
                  return typeof e === ue ? (e = function (t) {
                    return function (e) {
                      return t[x]("{value}", null != e ? e : "")
                    }
                  }(e), a.map(n, e)) : typeof e === oe ? a.map(r, function (i, n) {
                    return e(s.getAxisRawValue(t, i), n)
                  }, this) : n
                }, s.getAxisRawValue = function (t, e) {
                  return t.type === re ? t.scale.getLabel(e) : e
                }, s
              }), e("echarts/coord/cartesian/GridModel", [Ve, "./AxisModel", "../../model/Component"], function (t) {
                t("./AxisModel");
                var e = t("../../model/Component");
                return e[ge]({
                  type: "grid",
                  dependencies: ["xAxis", "yAxis"],
                  layoutMode: "box",
                  coordinateSystem: null,
                  defaultOption: {
                    show: !1,
                    zlevel: 0,
                    z: 0,
                    left: "10%",
                    top: 60,
                    right: "10%",
                    bottom: 60,
                    containLabel: !1,
                    backgroundColor: "rgba(0,0,0,0)",
                    borderWidth: 1,
                    borderColor: "#ccc"
                  }
                })
              }), e("echarts/coord/cartesian/Cartesian2D", [Ve, Fe, "./Cartesian"], function (t) {
                function e(t) {
                  n.call(this, t)
                }
                var i = t(Fe),
                  n = t("./Cartesian");
                return e[ye] = {
                  constructor: e,
                  type: "cartesian2d",
                  dimensions: ["x", "y"],
                  getBaseAxis: function () {
                    return this.getAxesByScale(m)[0] || this.getAxesByScale("time")[0] || this[ne]("x")
                  },
                  containPoint: function (t) {
                    var e = this[ne]("x"),
                      i = this[ne]("y");
                    return e.contain(e.toLocalCoord(t[0])) && i.contain(i.toLocalCoord(t[1]))
                  },
                  containData: function (t) {
                    return this[ne]("x").containData(t[0]) && this[ne]("y").containData(t[1])
                  },
                  dataToPoints: function (t, e) {
                    return t.mapArray(["x", "y"], function (t, e) {
                      return this[ee]([t, e])
                    }, e, this)
                  },
                  dataToPoint: function (t, e) {
                    var i = this[ne]("x"),
                      n = this[ne]("y");
                    return [i[te](i[J](t[0], e)), n[te](n[J](t[1], e))]
                  },
                  pointToData: function (t, e) {
                    var i = this[ne]("x"),
                      n = this[ne]("y");
                    return [i.coordToData(i.toLocalCoord(t[0]), e), n.coordToData(n.toLocalCoord(t[1]), e)]
                  },
                  getOtherAxis: function (t) {
                    return this[ne]("x" === t.dim ? "y" : "x")
                  }
                }, i[g](e, n), e
              }), e("echarts/coord/cartesian/Axis2D", [Ve, Fe, "../Axis"], function (t) {
                var e = t(Fe),
                  i = t("../Axis"),
                  n = function (t, e, n, r, a) {
                    i.call(this, t, e, n), this.type = r || "value", this[be] = a || we
                  };
                return n[ye] = {
                  constructor: n,
                  index: 0,
                  onZero: !1,
                  model: null,
                  isHorizontal: function () {
                    var t = this[be];
                    return "top" === t || t === we
                  },
                  getGlobalExtent: function (t) {
                    var e = this[fe]();
                    return e[0] = this[te](e[0]), e[1] = this[te](e[1]), t && e[0] > e[1] && e.reverse(), e
                  },
                  getOtherAxis: function () {
                    this.grid.getOtherAxis()
                  },
                  isLabelIgnored: function (t) {
                    if (this.type === re) {
                      var e = this.getLabelInterval();
                      return typeof e === oe && !e(t, this.scale.getLabel(t)) || t % (e + 1)
                    }
                  },
                  pointToData: function (t, e) {
                    return this.coordToData(this.toLocalCoord(t["x" === this.dim ? 0 : 1]), e)
                  },
                  toLocalCoord: null,
                  toGlobalCoord: null
                }, e[g](n, i), n
              }), e("echarts/CoordinateSystem", [Ve, Fe], function (t) {
                function e() {
                  this._coordinateSystems = []
                }
                var i = t(Fe),
                  n = {};
                return e[ye] = {
                  constructor: e,
                  create: function (t, e) {
                    var r = [];
                    i.each(n, function (i) {
                      var n = i[me](t, e);
                      r = r[se](n || [])
                    }), this._coordinateSystems = r
                  },
                  update: function (t, e) {
                    i.each(this._coordinateSystems, function (i) {
                      i[ae] && i[ae](t, e)
                    })
                  },
                  getCoordinateSystems: function () {
                    return this._coordinateSystems.slice()
                  }
                }, e[j] = function (t, e) {
                  n[t] = e
                }, e.get = function (t) {
                  return n[t]
                }, e
              }), e("zrender/vml/graphic", [Ve, "../core/env", "../core/vector", "../core/BoundingRect", "../core/PathProxy", "../tool/color", "../contain/text", "../graphic/mixin/RectText", "../graphic/Displayable", "../graphic/Image", "../graphic/Text", "../graphic/Path", "../graphic/Gradient", "./core"], function (t) {
                if (!t("../core/env")[I]) {
                  var e = t("../core/vector"),
                    i = t("../core/BoundingRect"),
                    n = t("../core/PathProxy").CMD,
                    r = t("../tool/color"),
                    a = t("../contain/text"),
                    o = t("../graphic/mixin/RectText"),
                    s = t("../graphic/Displayable"),
                    l = t("../graphic/Image"),
                    c = t("../graphic/Text"),
                    h = t("../graphic/Path"),
                    m = t("../core/PathProxy"),
                    v = t("../graphic/Gradient"),
                    g = t("./core"),
                    y = Math.round,
                    b = Math.sqrt,
                    w = Math.abs,
                    M = Math.cos,
                    T = Math.sin,
                    S = Math.max,
                    P = e[p],
                    C = ",",
                    L = "progid:DXImageTransform.Microsoft",
                    k = 21600,
                    z = k / 2,
                    D = 1e5,
                    E = 1e3,
                    R = function (t) {
                      t.style.cssText = "position:absolute;left:0;top:0;width:1px;height:1px;", t.coordsize = k + "," + k, t.coordorigin = "0,0"
                    },
                    B = function (t) {
                      return String(t)[x](/&/g, "&amp;")[x](/"/g, "&quot;")
                    },
                    N = function (t, e, i) {
                      return "rgb(" + [t, e, i].join(",") + ")"
                    },
                    F = function (t, e) {
                      e && t && e.parentNode !== t && t.appendChild(e)
                    },
                    V = function (t, e) {
                      e && t && e.parentNode === t && t.removeChild(e)
                    },
                    H = function (t, e, i) {
                      return (parseFloat(t) || 0) * D + (parseFloat(e) || 0) * E + i
                    },
                    G = function (t, e) {
                      return typeof t === ue ? t.lastIndexOf("%") >= 0 ? parseFloat(t) / 100 * e : parseFloat(t) : t
                    },
                    q = function (t, e, i) {
                      var n = r.parse(e);
                      i = +i, isNaN(i) && (i = 1), n && (t.color = N(n[0], n[1], n[2]), t[xe] = i * n[3])
                    },
                    W = function (t) {
                      var e = r.parse(t);
                      return [N(e[0], e[1], e[2]), e[3]]
                    },
                    Z = function (t, e, i) {
                      var n = e.fill;
                      if (null != n)
                        if (n instanceof v) {
                          var r, a = 0,
                            o = [0, 0],
                            s = 0,
                            l = 1,
                            c = i[ke](),
                            h = c.width,
                            d = c[Le];
                          if ("linear" === n.type) {
                            r = "gradient";
                            var f = i[u],
                              p = [n.x * h, n.y * d],
                              m = [n.x2 * h, n.y2 * d];
                            f && (P(p, p, f), P(m, m, f));
                            var g = m[0] - p[0],
                              y = m[1] - p[1];
                            a = 180 * Math.atan2(g, y) / Math.PI, 0 > a && (a += 360), 1e-6 > a && (a = 0)
                          } else {
                            r = "gradientradial";
                            var p = [n.x * h, n.y * d],
                              f = i[u],
                              x = i.scale,
                              _ = h,
                              b = d;
                            o = [(p[0] - c.x) / _, (p[1] - c.y) / b], f && P(p, p, f), _ /= x[0] * k, b /= x[1] * k;
                            var w = S(_, b);
                            s = 0 / w, l = 2 * n.r / w - s
                          }
                          var M = n[A].slice();
                          M.sort(function (t, e) {
                            return t[O] - e[O]
                          });
                          for (var T = M[ve], C = [], L = [], I = 0; T > I; I++) {
                            var z = M[I],
                              D = W(z.color);
                            L.push(z[O] * l + s + " " + D[0]), (0 === I || I === T - 1) && C.push(D)
                          }
                          if (T >= 2) {
                            var E = C[0][0],
                              R = C[1][0],
                              B = C[0][1] * e[xe],
                              N = C[1][1] * e[xe];
                            t.type = r, t.method = "none", t.focus = "100%", t.angle = a, t.color = E, t.color2 = R, t.colors = L.join(","), t[xe] = N, t.opacity2 = B
                          }
                          "radial" === r && (t.focusposition = o.join(","))
                        } else q(t, n, e[xe])
                    },
                    j = function (t, e) {
                      null != e.lineDash && (t.dashstyle = e.lineDash.join(" ")), null == e[d] || e[d] instanceof v || q(t, e[d], e[xe])
                    },
                    X = function (t, e, i, n) {
                      var r = "fill" == e,
                        a = t.getElementsByTagName(e)[0];
                      null != i[e] && "none" !== i[e] && (r || !r && i[f]) ? (t[r ? "filled" : "stroked"] = "true", i[e] instanceof v && V(t, a), a || (a = g.createNode(e)), r ? Z(a, i, n) : j(a, i), F(t, a)) : (t[r ? "filled" : "stroked"] = "false", V(t, a))
                    },
                    Y = [
                      [],
                      [],
                      []
                    ],
                    $ = function (t, e) {
                      var i, r, a, o, s, l, u = n.M,
                        c = n.C,
                        h = n.L,
                        d = n.A,
                        f = n.Q,
                        p = [];
                      for (o = 0; o < t[ve];) {
                        switch (a = t[o++], r = "", i = 0, a) {
                          case u:
                            r = " m ", i = 1, s = t[o++], l = t[o++], Y[0][0] = s, Y[0][1] = l;
                            break;
                          case h:
                            r = " l ", i = 1, s = t[o++], l = t[o++], Y[0][0] = s, Y[0][1] = l;
                            break;
                          case f:
                          case c:
                            r = " c ", i = 3;
                            var m, v, g = t[o++],
                              x = t[o++],
                              _ = t[o++],
                              w = t[o++];
                            a === f ? (m = _, v = w, _ = (_ + 2 * g) / 3, w = (w + 2 * x) / 3, g = (s + 2 * g) / 3, x = (l + 2 * x) / 3) : (m = t[o++], v = t[o++]), Y[0][0] = g, Y[0][1] = x, Y[1][0] = _, Y[1][1] = w, Y[2][0] = m, Y[2][1] = v, s = m, l = v;
                            break;
                          case d:
                            var S = 0,
                              A = 0,
                              L = 1,
                              I = 1,
                              D = 0;
                            e && (S = e[4], A = e[5], L = b(e[0] * e[0] + e[1] * e[1]), I = b(e[2] * e[2] + e[3] * e[3]), D = Math.atan2(-e[1] / I, e[0] / L));
                            var O = t[o++],
                              E = t[o++],
                              R = t[o++],
                              B = t[o++],
                              N = t[o++] + D,
                              F = t[o++] + N + D;
                            o++;
                            var V = t[o++],
                              H = O + M(N) * R,
                              G = E + T(N) * B,
                              g = O + M(F) * R,
                              x = E + T(F) * B,
                              q = V ? " wa " : " at ";
                            Math.abs(H - g) < 1e-4 && (Math.abs(F - N) > .01 ? V && (H += 270 / k) : Math.abs(G - E) < 1e-4 ? V && O > H || !V && H > O ? x -= 270 / k : x += 270 / k : V && E > G || !V && G > E ? g += 270 / k : g -= 270 / k), p.push(q, y(((O - R) * L + S) * k - z), C, y(((E - B) * I + A) * k - z), C, y(((O + R) * L + S) * k - z), C, y(((E + B) * I + A) * k - z), C, y((H * L + S) * k - z), C, y((G * I + A) * k - z), C, y((g * L + S) * k - z), C, y((x * I + A) * k - z)), s = g, l = x;
                            break;
                          case n.R:
                            var W = Y[0],
                              U = Y[1];
                            W[0] = t[o++], W[1] = t[o++], U[0] = W[0] + t[o++], U[1] = W[1] + t[o++], e && (P(W, W, e), P(U, U, e)), W[0] = y(W[0] * k - z), U[0] = y(U[0] * k - z), W[1] = y(W[1] * k - z), U[1] = y(U[1] * k - z), p.push(" m ", W[0], C, W[1], " l ", U[0], C, W[1], " l ", U[0], C, U[1], " l ", W[0], C, U[1]);
                            break;
                          case n.Z:
                            p.push(" x ")
                        }
                        if (i > 0) {
                          p.push(r);
                          for (var Z = 0; i > Z; Z++) {
                            var j = Y[Z];
                            e && P(j, j, e), p.push(y(j[0] * k - z), C, y(j[1] * k - z), i - 1 > Z ? C : "")
                          }
                        }
                      }
                      return p.join("")
                    };
                  h[ye].brushVML = function (t) {
                    var e = this.style,
                      i = this._vmlEl;
                    i || (i = g.createNode("shape"), R(i), this._vmlEl = i), X(i, "fill", e, this), X(i, d, e, this);
                    var n = this[u],
                      r = null != n,
                      a = i.getElementsByTagName(d)[0];
                    if (a) {
                      var o = e[f];
                      if (r && !e.strokeNoScale) {
                        var s = n[0] * n[3] - n[1] * n[2];
                        o *= b(w(s))
                      }
                      a.weight = o + "px"
                    }
                    var l = this.path || (this.path = new m);
                    this.__dirtyPath && (l.beginPath(), this.buildPath(l, this.shape), l.toStatic(), this.__dirtyPath = !1), i.path = $(l.data, this[u]), i.style.zIndex = H(this[_], this.z, this.z2), F(t, i), null != e.text ? this.drawRectText(t, this[ke]()) : this.removeRectText(t)
                  }, h[ye].onRemove = function (t) {
                    V(t, this._vmlEl), this.removeRectText(t)
                  }, h[ye].onAdd = function (t) {
                    F(t, this._vmlEl), this.appendRectText(t)
                  };
                  var K = function (t) {
                    return "object" == typeof t && t.tagName && "IMG" === t.tagName.toUpperCase()
                  };
                  l[ye].brushVML = function (t) {
                    var e, i, n = this.style,
                      r = n.image;
                    if (K(r)) {
                      var a = r.src;
                      if (a === this._imageSrc) e = this._imageWidth, i = this._imageHeight;
                      else {
                        var o = r.runtimeStyle,
                          s = o.width,
                          l = o[Le];
                        o.width = "auto", o[Le] = "auto", e = r.width, i = r[Le], o.width = s, o[Le] = l, this._imageSrc = a, this._imageWidth = e, this._imageHeight = i
                      }
                      r = a
                    } else r === this._imageSrc && (e = this._imageWidth, i = this._imageHeight);
                    if (r) {
                      var c = n.x || 0,
                        h = n.y || 0,
                        d = n.width,
                        f = n[Le],
                        p = n.sWidth,
                        m = n.sHeight,
                        v = n.sx || 0,
                        x = n.sy || 0,
                        w = p && m,
                        M = this._vmlEl;
                      M || (M = g.doc[he]("div"), R(M), this._vmlEl = M);
                      var T, A = M.style,
                        k = !1,
                        I = 1,
                        z = 1;
                      if (this[u] && (T = this[u], I = b(T[0] * T[0] + T[1] * T[1]), z = b(T[2] * T[2] + T[3] * T[3]), k = T[1] || T[2]), k) {
                        var D = [c, h],
                          O = [c + d, h],
                          E = [c, h + f],
                          B = [c + d, h + f];
                        P(D, D, T), P(O, O, T), P(E, E, T), P(B, B, T);
                        var N = S(D[0], O[0], E[0], B[0]),
                          V = S(D[1], O[1], E[1], B[1]),
                          G = [];
                        G.push("M11=", T[0] / I, C, "M12=", T[2] / z, C, "M21=", T[1] / I, C, "M22=", T[3] / z, C, "Dx=", y(c * I + T[4]), C, "Dy=", y(h * z + T[5])), A.padding = "0 " + y(N) + "px " + y(V) + "px 0", A[de] = L + ".Matrix(" + G.join("") + ", SizingMethod=clip)"
                      } else T && (c = c * I + T[4], h = h * z + T[5]), A[de] = "", A.left = y(c) + "px", A.top = y(h) + "px";
                      var q = this._imageEl,
                        W = this._cropEl;
                      q || (q = g.doc[he]("div"), this._imageEl = q);
                      var U = q.style;
                      if (w) {
                        if (e && i) U.width = y(I * e * d / p) + "px", U[Le] = y(z * i * f / m) + "px";
                        else {
                          var Z = new Image,
                            j = this;
                          Z.onload = function () {
                            Z.onload = null, e = Z.width, i = Z[Le], U.width = y(I * e * d / p) + "px", U[Le] = y(z * i * f / m) + "px", j._imageWidth = e, j._imageHeight = i, j._imageSrc = r
                          }, Z.src = r
                        }
                        W || (W = g.doc[he]("div"), W.style.overflow = "hidden", this._cropEl = W);
                        var X = W.style;
                        X.width = y((d + v * d / p) * I), X[Le] = y((f + x * f / m) * z), X[de] = L + ".Matrix(Dx=" + -v * d / p * I + ",Dy=" + -x * f / m * z + ")", W.parentNode || M.appendChild(W), q.parentNode != W && W.appendChild(q)
                      } else U.width = y(I * d) + "px", U[Le] = y(z * f) + "px", M.appendChild(q), W && W.parentNode && (M.removeChild(W), this._cropEl = null);
                      var Y = "",
                        $ = n[xe];
                      1 > $ && (Y += ".Alpha(opacity=" + y(100 * $) + ") "), Y += L + ".AlphaImageLoader(src=" + r + ", SizingMethod=scale)", U[de] = Y, M.style.zIndex = H(this[_], this.z, this.z2), F(t, M), null != n.text && this.drawRectText(t, this[ke]())
                    }
                  }, l[ye].onRemove = function (t) {
                    V(t, this._vmlEl), this._vmlEl = null, this._cropEl = null, this._imageEl = null, this.removeRectText(t)
                  }, l[ye].onAdd = function (t) {
                    F(t, this._vmlEl), this.appendRectText(t)
                  };
                  var Q, J = U,
                    te = {},
                    ee = 0,
                    ie = 100,
                    ne = document[he]("div"),
                    re = function (t) {
                      var e = te[t];
                      if (!e) {
                        ee > ie && (ee = 0, te = {});
                        var i, n = ne.style;
                        try {
                          n.font = t, i = n.fontFamily.split(",")[0]
                        } catch (r) {}
                        e = {
                          style: n.fontStyle || J,
                          variant: n.fontVariant || J,
                          weight: n.fontWeight || J,
                          size: 0 | parseFloat(n.fontSize || 12),
                          family: i || "Microsoft YaHei"
                        }, te[t] = e, ee++
                      }
                      return e
                    };
                  a.measureText = function (t, e) {
                    var i = g.doc;
                    Q || (Q = i[he]("div"), Q.style.cssText = "position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;", g.doc.body.appendChild(Q));
                    try {
                      Q.style.font = e
                    } catch (n) {}
                    return Q.innerHTML = "", Q.appendChild(i.createTextNode(t)), {
                      width: Q.offsetWidth
                    }
                  };
                  for (var ae = new i, oe = function (t, e, i, n) {
                      var r = this.style,
                        o = r.text;
                      if (null != o && (o += ""), o) {
                        var s, l, c = r[ze],
                          h = re(r.textFont),
                          f = h.style + " " + h.variant + " " + h.weight + " " + h.size + 'px "' + h.family + '"',
                          m = r.textBaseline,
                          v = r.textVerticalAlign;
                        i = i || a[ke](o, f, c, m);
                        var x = this[u];
                        if (x && !n && (ae.copy(e), ae[p](x), e = ae), n) s = e.x, l = e.y;
                        else {
                          var b = r.textPosition,
                            w = r.textDistance;
                          if (b instanceof Array) s = e.x + G(b[0], e.width), l = e.y + G(b[1], e[Le]), c = c || "left", m = m || "top";
                          else {
                            var M = a.adjustTextPositionOnRect(b, e, i, w);
                            s = M.x, l = M.y, c = c || M[ze], m = m || M.textBaseline
                          }
                        }
                        if (v) {
                          switch (v) {
                            case Te:
                              l -= i[Le] / 2;
                              break;
                            case we:
                              l -= i[Le]
                          }
                          m = "top"
                        }
                        var T = h.size;
                        switch (m) {
                          case "hanging":
                          case "top":
                            l += T / 1.75;
                            break;
                          case Te:
                            break;
                          default:
                            l -= T / 2.25
                        }
                        switch (c) {
                          case "left":
                            break;
                          case Me:
                            s -= i.width / 2;
                            break;
                          case "right":
                            s -= i.width
                        }
                        var S, A, L, k = g.createNode,
                          I = this._textVmlEl;
                        I ? (L = I.firstChild, S = L.nextSibling, A = S.nextSibling) : (I = k("line"), S = k("path"), A = k("textpath"), L = k("skew"), A.style["v-text-align"] = "left", R(I), S.textpathok = !0, A.on = !0, I.from = "0 0", I.to = "1000 0.05", F(I, L), F(I, S), F(I, A), this._textVmlEl = I);
                        var z = [s, l],
                          D = I.style;
                        x && n ? (P(z, z, x), L.on = !0, L.matrix = x[0].toFixed(3) + C + x[2].toFixed(3) + C + x[1].toFixed(3) + C + x[3].toFixed(3) + ",0,0", L[O] = (y(z[0]) || 0) + "," + (y(z[1]) || 0), L.origin = "0 0", D.left = "0px", D.top = "0px") : (L.on = !1, D.left = y(s) + "px", D.top = y(l) + "px"), A[ue] = B(o);
                        try {
                          A.style.font = f
                        } catch (E) {}
                        X(I, "fill", {
                          fill: n ? r.fill : r.textFill,
                          opacity: r[xe]
                        }, this), X(I, d, {
                          stroke: n ? r[d] : r.textStroke,
                          opacity: r[xe],
                          lineDash: r.lineDash
                        }, this), I.style.zIndex = H(this[_], this.z, this.z2), F(t, I)
                      }
                    }, se = function (t) {
                      V(t, this._textVmlEl), this._textVmlEl = null
                    }, le = function (t) {
                      F(t, this._textVmlEl)
                    }, ce = [o, s, l, h, c], fe = 0; fe < ce[ve]; fe++) {
                    var pe = ce[fe][ye];
                    pe.drawRectText = oe, pe.removeRectText = se, pe.appendRectText = le
                  }
                  c[ye].brushVML = function (t) {
                    var e = this.style;
                    null != e.text ? this.drawRectText(t, {
                      x: e.x || 0,
                      y: e.y || 0,
                      width: 0,
                      height: 0
                    }, this[ke](), !0) : this.removeRectText(t)
                  }, c[ye].onRemove = function (t) {
                    this.removeRectText(t)
                  }, c[ye].onAdd = function (t) {
                    this.appendRectText(t)
                  }
                }
              }), e(D, [], function () {
                function t(t) {
                  var e = {},
                    i = {},
                    n = t.match(/Firefox\/([\d.]+)/),
                    r = t.match(/MSIE\s([\d.]+)/) || t.match(/Trident\/.+?rv:(([\d.]+))/),
                    a = t.match(/Edge\/([\d.]+)/),
                    o = /micromessenger/i.test(t);
                  return n && (i.firefox = !0, i.version = n[1]), r && (i.ie = !0, i.version = r[1]), a && (i.edge = !0, i.version = a[1]), o && (i.weChat = !0), {
                    browser: i,
                    os: e,
                    node: !1,
                    canvasSupported: document[he]("canvas").getContext ? !0 : !1,
                    touchEventsSupported: "ontouchstart" in window && !i.ie && !i.edge,
                    pointerEventsSupported: "onpointerdown" in window && (i.edge || i.ie && i.version >= 11)
                  }
                }
                var e = {};
                return e = typeof navigator === o ? {
                  browser: {},
                  os: {},
                  node: !0,
                  canvasSupported: !0
                } : t(navigator.userAgent)
              }), e("echarts/ExtensionAPI", [Ve, Fe], function (t) {
                function e(t) {
                  i.each(n, function (e) {
                    this[e] = i.bind(t[e], t)
                  }, this)
                }
                var i = t(Fe),
                  n = ["getDom", "getZr", Pe, Se, "getDevicePixelRatio", P, "isDisposed", "on", "off", "getDataURL", "getConnectedDataURL", Oe, "getOption", "getViewOfComponentModel", "getViewOfSeriesModel"];
                return e
              }), e("echarts/model/Global", [Ve, Fe, "../util/model", "./Model", "./Component", "./globalDefault", "./mixin/colorPalette"], function (t) {
                function e(t, e) {
                  l.each(e, function (e, i) {
                    _.hasClass(i) || ("object" == typeof e ? t[i] = t[i] ? l.merge(t[i], e, !1) : l.clone(e) : null == t[i] && (t[i] = e))
                  })
                }

                function i(t) {
                  t = t, this[c] = {}, this[c][w] = 1, this._componentsMap = l.createHashMap({
                    series: []
                  }), this._seriesIndices = null, e(t, this._theme[c]), l.merge(t, b, !1), this.mergeOption(t)
                }

                function n(t, e) {
                  l[y](e) || (e = e ? [e] : []);
                  var i = {};
                  return d(e, function (e) {
                    i[e] = (t.get(e) || []).slice()
                  }), i
                }

                function r(t, e, i) {
                  var n = e.type ? e.type : i ? i.subType : _.determineSubType(t, e);
                  return n
                }

                function a(t) {
                  return p(t, function (t) {
                    return t[Q]
                  }) || []
                }

                function o(t, e) {
                  return e.hasOwnProperty("subType") ? f(t, function (t) {
                    return t.subType === e.subType
                  }) : t
                }

                function s(t) {}
                var l = t(Fe),
                  u = t("../util/model"),
                  h = t("./Model"),
                  d = l.each,
                  f = l[de],
                  p = l.map,
                  m = l[y],
                  g = l[ce],
                  x = l[ie],
                  _ = t("./Component"),
                  b = t("./globalDefault"),
                  w = "\x00_ec_inner",
                  T = h[ge]({
                    constructor: T,
                    init: function (t, e, i, n) {
                      i = i || {}, this[c] = null, this._theme = new h(i), this._optionManager = n
                    },
                    setOption: function (t, e) {
                      l.assert(!(w in t), "please use chart.getOption()"), this._optionManager.setOption(t, e), this.resetOption(null)
                    },
                    resetOption: function (t) {
                      var e = !1,
                        n = this._optionManager;
                      if (!t || "recreate" === t) {
                        var r = n.mountOption("recreate" === t);
                        this[c] && "recreate" !== t ? (this.restoreData(), this.mergeOption(r)) : i.call(this, r), e = !0
                      }
                      if (("timeline" === t || "media" === t) && this.restoreData(), !t || "recreate" === t || "timeline" === t) {
                        var a = n.getTimelineOption(this);
                        a && (this.mergeOption(a), e = !0)
                      }
                      if (!t || "recreate" === t || "media" === t) {
                        var o = n.getMediaOption(this, this._api);
                        o[ve] && d(o, function (t) {
                          this.mergeOption(t, e = !0)
                        }, this)
                      }
                      return e
                    },
                    mergeOption: function (t) {
                      function e(e, s) {
                        var h = u.normalizeToArray(t[e]),
                          f = u.mappingToExists(o.get(e), h);
                        u.makeIdAndName(f), d(f, function (t) {
                          var i = t[c];
                          x(i) && (t.keyInfo.mainType = e, t.keyInfo.subType = r(e, i, t.exist))
                        });
                        var p = n(o, s);
                        i[e] = [], o.set(e, []), d(f, function (t, n) {
                          var r = t.exist,
                            a = t[c];
                          if (l.assert(x(a) || r, "Empty component definition"), a) {
                            var s = _.getClass(e, t.keyInfo.subType, !0);
                            if (r && r instanceof s) r.name = t.keyInfo.name, r.mergeOption(a, this), r.optionUpdated(a, !1);
                            else {
                              var u = l[ge]({
                                dependentModels: p,
                                componentIndex: n
                              }, t.keyInfo);
                              r = new s(a, this, this, u), l[ge](r, u), r.init(a, this, this, u), r.optionUpdated(null, !0)
                            }
                          } else r.mergeOption({}, this), r.optionUpdated({}, !1);
                          o.get(e)[n] = r, i[e][n] = r[c]
                        }, this), e === C && (this._seriesIndices = a(o.get(C)))
                      }
                      var i = this[c],
                        o = this._componentsMap,
                        s = [];
                      d(t, function (t, e) {
                        null != t && (_.hasClass(e) ? s.push(e) : i[e] = null == i[e] ? l.clone(t) : l.merge(i[e], t, !0))
                      }), _.topologicalTravel(s, _.getAllClassMainTypes(), e, this), this._seriesIndices = this._seriesIndices || []
                    },
                    getOption: function () {
                      var t = l.clone(this[c]);
                      return d(t, function (e, i) {
                        if (_.hasClass(i)) {
                          for (var e = u.normalizeToArray(e), n = e[ve] - 1; n >= 0; n--) u.isIdInner(e[n]) && e[M](n, 1);
                          t[i] = e
                        }
                      }), delete t[w], t
                    },
                    getTheme: function () {
                      return this._theme
                    },
                    getComponent: function (t, e) {
                      var i = this._componentsMap.get(t);
                      return i ? i[e || 0] : void 0
                    },
                    queryComponents: function (t) {
                      var e = t.mainType;
                      if (!e) return [];
                      var i = t.index,
                        n = t.id,
                        r = t.name,
                        a = this._componentsMap.get(e);
                      if (!a || !a[ve]) return [];
                      var s;
                      if (null != i) m(i) || (i = [i]), s = f(p(i, function (t) {
                        return a[t]
                      }), function (t) {
                        return !!t
                      });
                      else if (null != n) {
                        var l = m(n);
                        s = f(a, function (t) {
                          return l && g(n, t.id) >= 0 || !l && t.id === n
                        })
                      } else if (null != r) {
                        var u = m(r);
                        s = f(a, function (t) {
                          return u && g(r, t.name) >= 0 || !u && t.name === r
                        })
                      } else s = a.slice();
                      return o(s, t)
                    },
                    findComponents: function (t) {
                      function e(t) {
                        var e = r + "Index",
                          i = r + "Id",
                          n = r + "Name";
                        return !t || null == t[e] && null == t[i] && null == t[n] ? null : {
                          mainType: r,
                          index: t[e],
                          id: t[i],
                          name: t[n]
                        }
                      }

                      function i(e) {
                        return t[de] ? f(e, t[de]) : e
                      }
                      var n = t.query,
                        r = t.mainType,
                        a = e(n),
                        s = a ? this.queryComponents(a) : this._componentsMap.get(r);
                      return i(o(s, t))
                    },
                    eachComponent: function (t, e, i) {
                      var n = this._componentsMap;
                      if (typeof t === oe) i = e, e = t, n.each(function (t, n) {
                        d(t, function (t, r) {
                          e.call(i, n, t, r)
                        })
                      });
                      else if (l[v](t)) d(n.get(t), e, i);
                      else if (x(t)) {
                        var r = this.findComponents(t);
                        d(r, e, i)
                      }
                    },
                    getSeriesByName: function (t) {
                      var e = this._componentsMap.get(C);
                      return f(e, function (e) {
                        return e.name === t
                      })
                    },
                    getSeriesByIndex: function (t) {
                      return this._componentsMap.get(C)[t]
                    },
                    getSeriesByType: function (t) {
                      var e = this._componentsMap.get(C);
                      return f(e, function (e) {
                        return e.subType === t
                      })
                    },
                    getSeries: function () {
                      return this._componentsMap.get(C).slice()
                    },
                    eachSeries: function (t, e) {
                      s(this), d(this._seriesIndices, function (i) {
                        var n = this._componentsMap.get(C)[i];
                        t.call(e, n, i)
                      }, this)
                    },
                    eachRawSeries: function (t, e) {
                      d(this._componentsMap.get(C), t, e)
                    },
                    eachSeriesByType: function (t, e, i) {
                      s(this), d(this._seriesIndices, function (n) {
                        var r = this._componentsMap.get(C)[n];
                        r.subType === t && e.call(i, r, n)
                      }, this)
                    },
                    eachRawSeriesByType: function (t, e, i) {
                      return d(this.getSeriesByType(t), e, i)
                    },
                    isSeriesFiltered: function (t) {
                      return s(this), l[ce](this._seriesIndices, t[Q]) < 0
                    },
                    getCurrentSeriesIndices: function () {
                      return (this._seriesIndices || []).slice()
                    },
                    filterSeries: function (t, e) {
                      s(this);
                      var i = f(this._componentsMap.get(C), t, e);
                      this._seriesIndices = a(i)
                    },
                    restoreData: function () {
                      var t = this._componentsMap;
                      this._seriesIndices = a(t.get(C));
                      var e = [];
                      t.each(function (t, i) {
                        e.push(i)
                      }), _.topologicalTravel(e, _.getAllClassMainTypes(), function (e) {
                        d(t.get(e), function (t) {
                          t.restoreData()
                        })
                      })
                    }
                  });
                return l.mixin(T, t("./mixin/colorPalette")), T
              }), e("echarts/model/OptionManager", [Ve, Fe, "../util/model", "./Component"], function (t) {
                function e(t) {
                  this._api = t, this._timelineOptions = [], this._mediaList = [], this._mediaDefault, this._currentMediaIndices = [], this._optionBackup, this._newBaseOption
                }

                function i(t, e, i) {
                  var n, r, a = [],
                    o = [],
                    l = t.timeline;
                  if (t.baseOption && (r = t.baseOption), (l || t.options) && (r = r || {}, a = (t.options || []).slice()), t.media) {
                    r = r || {};
                    var u = t.media;
                    h(u, function (t) {
                      t && t[c] && (t.query ? o.push(t) : n || (n = t))
                    })
                  }
                  return r || (r = t), r.timeline || (r.timeline = l), h([r][se](a)[se](s.map(o, function (t) {
                    return t[c]
                  })), function (t) {
                    h(e, function (e) {
                      e(t, i)
                    })
                  }), {
                    baseOption: r,
                    timelineOptions: a,
                    mediaDefault: n,
                    mediaList: o
                  }
                }

                function n(t, e, i) {
                  var n = {
                      width: e,
                      height: i,
                      aspectratio: e / i
                    },
                    a = !0;
                  return s.each(t, function (t, e) {
                    var i = e.match(m);
                    if (i && i[1] && i[2]) {
                      var o = i[1],
                        s = i[2][z]();
                      r(n[s], t, o) || (a = !1)
                    }
                  }), a
                }

                function r(t, e, i) {
                  return "min" === i ? t >= e : "max" === i ? e >= t : t === e
                }

                function a(t, e) {
                  return t.join(",") === e.join(",")
                }

                function o(t, e) {
                  e = e || {}, h(e, function (e, i) {
                    if (null != e) {
                      var n = t[i];
                      if (u.hasClass(i)) {
                        e = l.normalizeToArray(e), n = l.normalizeToArray(n);
                        var r = l.mappingToExists(n, e);
                        t[i] = f(r, function (t) {
                          return t[c] && t.exist ? p(t.exist, t[c], !0) : t.exist || t[c]
                        })
                      } else t[i] = p(n, e, !0)
                    }
                  })
                }
                var s = t(Fe),
                  l = t("../util/model"),
                  u = t("./Component"),
                  h = s.each,
                  d = s.clone,
                  f = s.map,
                  p = s.merge,
                  m = /^(min|max)?(.+)$/;
                return e[ye] = {
                  constructor: e,
                  setOption: function (t, e) {
                    t = d(t, !0);
                    var n = this._optionBackup,
                      r = i.call(this, t, e, !n);
                    this._newBaseOption = r.baseOption, n ? (o(n.baseOption, r.baseOption), r.timelineOptions[ve] && (n.timelineOptions = r.timelineOptions), r.mediaList[ve] && (n.mediaList = r.mediaList), r.mediaDefault && (n.mediaDefault = r.mediaDefault)) : this._optionBackup = r
                  },
                  mountOption: function (t) {
                    var e = this._optionBackup;
                    return this._timelineOptions = f(e.timelineOptions, d), this._mediaList = f(e.mediaList, d), this._mediaDefault = d(e.mediaDefault), this._currentMediaIndices = [], d(t ? e.baseOption : this._newBaseOption)
                  },
                  getTimelineOption: function (t) {
                    var e, i = this._timelineOptions;
                    if (i[ve]) {
                      var n = t.getComponent("timeline");
                      n && (e = d(i[n.getCurrentIndex()], !0))
                    }
                    return e
                  },
                  getMediaOption: function () {
                    var t = this._api[Pe](),
                      e = this._api[Se](),
                      i = this._mediaList,
                      r = this._mediaDefault,
                      o = [],
                      s = [];
                    if (!i[ve] && !r) return s;
                    for (var l = 0, u = i[ve]; u > l; l++) n(i[l].query, t, e) && o.push(l);
                    return !o[ve] && r && (o = [-1]), o[ve] && !a(o, this._currentMediaIndices) && (s = f(o, function (t) {
                      return d(-1 === t ? r[c] : i[t][c])
                    })), this._currentMediaIndices = o, s
                  }
                }, e
              }), e("echarts/model/Component", [Ve, "./Model", Fe, "../util/component", "../util/clazz", "../util/layout", "./mixin/boxLayout"], function (t) {
                function e(t) {
                  var e = [];
                  return n.each(l.getClassesByMainType(t), function (t) {
                    r.apply(e, t[ye].dependencies || [])
                  }), n.map(e, function (t) {
                    return o.parseClassType(t).main
                  })
                }
                var i = t("./Model"),
                  n = t(Fe),
                  r = Array[ye].push,
                  a = t("../util/component"),
                  o = t("../util/clazz"),
                  s = t("../util/layout"),
                  l = i[ge]({
                    type: "component",
                    id: "",
                    name: "",
                    mainType: "",
                    subType: "",
                    componentIndex: 0,
                    defaultOption: null,
                    ecModel: null,
                    dependentModels: [],
                    uid: null,
                    layoutMode: null,
                    $constructor: function (t, e, n, r) {
                      i.call(this, t, e, n, r), this.uid = a.getUID("componentModel")
                    },
                    init: function (t, e, i) {
                      this.mergeDefaultAndTheme(t, i)
                    },
                    mergeDefaultAndTheme: function (t, e) {
                      var i = this.layoutMode,
                        r = i ? s.getLayoutParams(t) : {},
                        a = e.getTheme();
                      n.merge(t, a.get(this.mainType)), n.merge(t, this.getDefaultOption()), i && s.mergeLayoutParam(t, r, i)
                    },
                    mergeOption: function (t) {
                      n.merge(this[c], t, !0);
                      var e = this.layoutMode;
                      e && s.mergeLayoutParam(this[c], t, e)
                    },
                    optionUpdated: function () {},
                    getDefaultOption: function () {
                      if (!o.hasOwn(this, "__defaultOption")) {
                        for (var t = [], e = this.constructor; e;) {
                          var i = e[ye].defaultOption;
                          i && t.push(i), e = e.superClass
                        }
                        for (var r = {}, a = t[ve] - 1; a >= 0; a--) r = n.merge(r, t[a], !0);
                        o.set(this, "__defaultOption", r)
                      }
                      return o.get(this, "__defaultOption")
                    },
                    getReferringComponents: function (t) {
                      return this[pe].queryComponents({
                        mainType: t,
                        index: this.get(t + "Index", !0),
                        id: this.get(t + "Id", !0)
                      })
                    }
                  });
                return o.enableClassManagement(l, {
                  registerWhenExtend: !0
                }), a.enableSubTypeDefaulter(l), a.enableTopologicalTravel(l, e), n.mixin(l, t("./mixin/boxLayout")), l
              }), e("echarts/model/Series", [Ve, Fe, "../util/format", "../util/clazz", "../util/model", "./Component", "./mixin/colorPalette", D, "../util/layout"], function (t) {
                var e = t(Fe),
                  i = t("../util/format"),
                  n = t("../util/clazz"),
                  r = t("../util/model"),
                  a = t("./Component"),
                  o = t("./mixin/colorPalette"),
                  s = t(D),
                  l = t("../util/layout"),
                  u = n.set,
                  h = n.get,
                  d = i.encodeHTML,
                  f = i.addCommas,
                  p = a[ge]({
                    type: "series.__base__",
                    seriesIndex: 0,
                    coordinateSystem: null,
                    defaultOption: null,
                    legendDataProvider: null,
                    visualColorAccessPath: "itemStyle.normal.color",
                    layoutMode: null,
                    init: function (t, e, i) {
                      this[E] = this[Q], this.mergeDefaultAndTheme(t, i);
                      var n = this.getInitialData(t, i);
                      u(this, "dataBeforeProcessed", n), this.restoreData()
                    },
                    mergeDefaultAndTheme: function (t, i) {
                      var n = this.layoutMode,
                        a = n ? l.getLayoutParams(t) : {};
                      e.merge(t, i.getTheme().get(this.subType)), e.merge(t, this.getDefaultOption()), r.defaultEmphasis(t.label, r.LABEL_OPTIONS), this.fillDataTextStyle(t.data), n && l.mergeLayoutParam(t, a, n)
                    },
                    mergeOption: function (t, i) {
                      t = e.merge(this[c], t, !0), this.fillDataTextStyle(t.data);
                      var n = this.layoutMode;
                      n && l.mergeLayoutParam(this[c], t, n);
                      var r = this.getInitialData(t, i);
                      r && (u(this, "data", r), u(this, "dataBeforeProcessed", r.cloneShallow()))
                    },
                    fillDataTextStyle: function (t) {
                      if (t)
                        for (var e = 0; e < t[ve]; e++) t[e] && t[e].label && r.defaultEmphasis(t[e].label, r.LABEL_OPTIONS)
                    },
                    getInitialData: function () {},
                    getData: function (t) {
                      var e = h(this, "data");
                      return null == t ? e : e.getLinkedData(t)
                    },
                    setData: function (t) {
                      u(this, "data", t)
                    },
                    getRawData: function () {
                      return h(this, "dataBeforeProcessed")
                    },
                    coordDimToDataDim: function (t) {
                      return r[$](this[Ne](), t)
                    },
                    dataDimToCoordDim: function (t) {
                      return r.dataDimToCoordDim(this[Ne](), t)
                    },
                    getBaseAxis: function () {
                      var t = this[Re];
                      return t && t.getBaseAxis && t.getBaseAxis()
                    },
                    formatTooltip: function (t, n) {
                      function a(a) {
                        function s(t, e) {
                          var r = o.getDimensionInfo(e);
                          if (r && r.otherDims.tooltip !== !1) {
                            var a = r.type,
                              s = (l ? "- " + (r.tooltipName || r.name) + ": " : "") + (a === m ? t + "" : "time" === a ? n ? "" : i.formatTime("yyyy/MM/dd hh:mm:ss", t) : f(t));
                            s && u.push(d(s))
                          }
                        }
                        var l = e.reduce(a, function (t, e, i) {
                            var n = o.getDimensionInfo(i);
                            return t |= n && n.tooltip !== !1 && null != n.tooltipName
                          }, 0),
                          u = [],
                          c = r.otherDimToDataDim(o, "tooltip");
                        return c[ve] ? e.each(c, function (e) {
                          s(o.get(e, t), e)
                        }) : e.each(a, s), (l ? "<br/>" : "") + u.join(l ? "<br/>" : ", ")
                      }
                      var o = h(this, "data"),
                        s = this.getRawValue(t),
                        l = e[y](s) ? a(s) : d(f(s)),
                        u = o.getName(t),
                        c = o[B](t, "color");
                      e[ie](c) && c[A] && (c = (c[A][0] || {}).color), c = c || L;
                      var p = i.getTooltipMarker(c),
                        v = this.name;
                      return "\x00-" === v && (v = ""), v = v ? d(v) + (n ? ": " : "<br/>") : "", n ? p + v + l : v + p + (u ? d(u) + ": " + l : l)
                    },
                    isAnimationEnabled: function () {
                      if (s.node) return !1;
                      var t = this[R](H);
                      return t && this[Ne]().count() > this[R]("animationThreshold") && (t = !1), t
                    },
                    restoreData: function () {
                      u(this, "data", h(this, "dataBeforeProcessed").cloneShallow())
                    },
                    getColorFromPalette: function (t, e) {
                      var i = this[pe],
                        n = o.getColorFromPalette.call(this, t, e);
                      return n || (n = i.getColorFromPalette(t, e)), n
                    },
                    getAxisTooltipData: null,
                    getTooltipPosition: null
                  });
                return e.mixin(p, r.dataFormatMixin), e.mixin(p, o), p
              }), e("echarts/view/Component", [Ve, "zrender/container/Group", "../util/component", "../util/clazz"], function (t) {
                var e = t("zrender/container/Group"),
                  i = t("../util/component"),
                  n = t("../util/clazz"),
                  r = function () {
                    this.group = new e, this.uid = i.getUID("viewComponent")
                  };
                r[ye] = {
                  constructor: r,
                  init: function () {},
                  render: function () {},
                  dispose: function () {}
                };
                var a = r[ye];
                return a.updateView = a.updateLayout = a.updateVisual = function () {}, n.enableClassExtend(r), n.enableClassManagement(r, {
                  registerWhenExtend: !0
                }), r
              }), e("echarts/view/Chart", [Ve, "zrender/container/Group", "../util/component", "../util/clazz", "../util/model", Fe], function (t) {
                function e() {
                  this.group = new r, this.uid = a.getUID("viewChart")
                }

                function i(t, e) {
                  if (t && (t[S](e), "group" === t.type))
                    for (var n = 0; n < t.childCount(); n++) i(t.childAt(n), e)
                }

                function n(t, e, n) {
                  var r = s.queryDataIndex(t, e);
                  null != r ? l.each(s.normalizeToArray(r), function (e) {
                    i(t[G](e), n)
                  }) : t[V](function (t) {
                    i(t, n)
                  })
                }
                var r = t("zrender/container/Group"),
                  a = t("../util/component"),
                  o = t("../util/clazz"),
                  s = t("../util/model"),
                  l = t(Fe);
                e[ye] = {
                  type: "chart",
                  init: function () {},
                  render: function () {},
                  highlight: function (t, e, i, r) {
                    n(t[Ne](), r, "emphasis")
                  },
                  downplay: function (t, e, i, r) {
                    n(t[Ne](), r, U)
                  },
                  remove: function () {
                    this.group[Be]()
                  },
                  dispose: function () {}
                };
                var u = e[ye];
                return u.updateView = u.updateLayout = u.updateVisual = function (t, e, i, n) {
                  this.render(t, e, i, n)
                }, o.enableClassExtend(e, [T]), o.enableClassManagement(e, {
                  registerWhenExtend: !0
                }), e
              }), e("echarts/util/model", [Ve, "./format", "./number", "../model/Model", Fe], function (t) {
                function e(t, e) {
                  return t && t.hasOwnProperty(e)
                }
                var i = t("./format"),
                  n = t("./number"),
                  r = t("../model/Model"),
                  a = t(Fe),
                  o = a.each,
                  s = a[ie],
                  l = {};
                return l.normalizeToArray = function (t) {
                  return t instanceof Array ? t : null == t ? [] : [t]
                }, l.defaultEmphasis = function (t, e) {
                  if (t) {
                    var i = t.emphasis = t.emphasis || {},
                      n = t[U] = t[U] || {};
                    o(e, function (t) {
                      var e = a[Y](i[t], n[t]);
                      null != e && (i[t] = e)
                    })
                  }
                }, l.LABEL_OPTIONS = [be, O, "show", De, "distance", "formatter"], l.getDataItemValue = function (t) {
                  return t && (null == t.value ? t : t.value)
                }, l.isDataItemOption = function (t) {
                  return s(t) && !(t instanceof Array)
                }, l.converDataValue = function (t, e) {
                  var i = e && e.type;
                  return i === m ? t : ("time" === i && typeof t !== le && null != t && "-" !== t && (t = +n.parseDate(t)), null == t || "" === t ? 0 / 0 : +t)
                }, l.createDataFormatModel = function (t, e) {
                  var i = new r;
                  return a.mixin(i, l.dataFormatMixin), i[E] = e[E], i.name = e.name || "", i.mainType = e.mainType, i.subType = e.subType, i[Ne] = function () {
                    return t
                  }, i
                }, l.dataFormatMixin = {
                  getDataParams: function (t, e) {
                    var n = this[Ne](e),
                      r = this.getRawValue(t, e),
                      a = n.getRawIndex(t),
                      o = n.getName(t, !0),
                      s = n.getRawDataItem(t),
                      l = n[B](t, "color");
                    return {
                      componentType: this.mainType,
                      componentSubType: this.subType,
                      seriesType: this.mainType === C ? this.subType : null,
                      seriesIndex: this[E],
                      seriesId: this.id,
                      seriesName: this.name,
                      name: o,
                      dataIndex: a,
                      data: s,
                      dataType: e,
                      value: r,
                      color: l,
                      marker: i.getTooltipMarker(l),
                      $vars: ["seriesName", "name", "value"]
                    }
                  },
                  getFormattedLabel: function (t, e, n, r, a) {
                    e = e || U;
                    var o = this[Ne](n),
                      s = o[q](t),
                      l = this[w](t, n);
                    null != r && l.value instanceof Array && (l.value = l.value[r]);
                    var u = s.get([a || "label", e, "formatter"]);
                    return typeof u === oe ? (l.status = e, u(l)) : typeof u === ue ? i.formatTpl(u, l) : void 0
                  },
                  getRawValue: function (t, e) {
                    var i = this[Ne](e),
                      n = i.getRawDataItem(t);
                    return null != n ? !s(n) || n instanceof Array ? n : n.value : void 0
                  },
                  formatTooltip: a.noop
                }, l.mappingToExists = function (t, e) {
                  e = (e || []).slice();
                  var i = a.map(t || [], function (t) {
                    return {
                      exist: t
                    }
                  });
                  return o(e, function (t, n) {
                    if (s(t)) {
                      for (var r = 0; r < i[ve]; r++)
                        if (!i[r][c] && null != t.id && i[r].exist.id === t.id + "") return i[r][c] = t, void(e[n] = null);
                      for (var r = 0; r < i[ve]; r++) {
                        var a = i[r].exist;
                        if (!(i[r][c] || null != a.id && null != t.id || null == t.name || l.isIdInner(t) || l.isIdInner(a) || a.name !== t.name + "")) return i[r][c] = t, void(e[n] = null)
                      }
                    }
                  }), o(e, function (t) {
                    if (s(t)) {
                      for (var e = 0; e < i[ve]; e++) {
                        var n = i[e].exist;
                        if (!i[e][c] && !l.isIdInner(n) && null == t.id) {
                          i[e][c] = t;
                          break
                        }
                      }
                      e >= i[ve] && i.push({
                        option: t
                      })
                    }
                  }), i
                }, l.makeIdAndName = function (t) {
                  var e = a.createHashMap();
                  o(t, function (t) {
                    var i = t.exist;
                    i && e.set(i.id, t)
                  }), o(t, function (t) {
                    var i = t[c];
                    a.assert(!i || null == i.id || !e.get(i.id) || e.get(i.id) === t, "id duplicates: " + (i && i.id)), i && null != i.id && e.set(i.id, t), !t.keyInfo && (t.keyInfo = {})
                  }), o(t, function (t) {
                    var i = t.exist,
                      n = t[c],
                      r = t.keyInfo;
                    if (s(n)) {
                      if (r.name = null != n.name ? n.name + "" : i ? i.name : "\x00-", i) r.id = i.id;
                      else if (null != n.id) r.id = n.id + "";
                      else {
                        var a = 0;
                        do r.id = "\x00" + r.name + "\x00" + a++; while (e.get(r.id))
                      }
                      e.set(r.id, t)
                    }
                  })
                }, l.isIdInner = function (t) {
                  return s(t) && t.id && 0 === (t.id + "")[ce]("\x00_ec_\x00")
                }, l.compressBatches = function (t, e) {
                  function i(t, e, i) {
                    for (var n = 0, r = t[ve]; r > n; n++)
                      for (var a = t[n].seriesId, o = l.normalizeToArray(t[n][F]), s = i && i[a], u = 0, c = o[ve]; c > u; u++) {
                        var h = o[u];
                        s && s[h] ? s[h] = null : (e[a] || (e[a] = {}))[h] = 1
                      }
                  }

                  function n(t, e) {
                    var i = [];
                    for (var r in t)
                      if (t.hasOwnProperty(r) && null != t[r])
                        if (e) i.push(+r);
                        else {
                          var a = n(t[r], !0);
                          a[ve] && i.push({
                            seriesId: r,
                            dataIndex: a
                          })
                        } return i
                  }
                  var r = {},
                    a = {};
                  return i(t || [], r), i(e || [], a, r), [n(r), n(a)]
                }, l.queryDataIndex = function (t, e) {
                  return null != e.dataIndexInside ? e.dataIndexInside : null != e[F] ? a[y](e[F]) ? a.map(e[F], function (e) {
                    return t.indexOfRawIndex(e)
                  }) : t.indexOfRawIndex(e[F]) : null != e.name ? a[y](e.name) ? a.map(e.name, function (e) {
                    return t.indexOfName(e)
                  }) : t.indexOfName(e.name) : void 0
                }, l.makeGetter = function () {
                  var t = 0;
                  return function () {
                    var e = "\x00__ec_prop_getter_" + t++;
                    return function (t) {
                      return t[e] || (t[e] = {})
                    }
                  }
                }(), l.parseFinder = function (t, i, n) {
                  if (a[v](i)) {
                    var r = {};
                    r[i + "Index"] = 0, i = r
                  }
                  var s = n && n.defaultMainType;
                  !s || e(i, s + "Index") || e(i, s + "Id") || e(i, s + "Name") || (i[s + "Index"] = 0);
                  var l = {};
                  return o(i, function (e, r) {
                    var e = i[r];
                    if (r === F || "dataIndexInside" === r) return void(l[r] = e);
                    var o = r.match(/^(\w+)(Index|Id|Name)$/) || [],
                      s = o[1],
                      u = (o[2] || "")[z]();
                    if (!(!s || !u || null == e || "index" === u && "none" === e || n && n.includeMainTypes && a[ce](n.includeMainTypes, s) < 0)) {
                      var c = {
                        mainType: s
                      };
                      ("index" !== u || "all" !== e) && (c[u] = e);
                      var h = t.queryComponents(c);
                      l[s + "Models"] = h, l[s + "Model"] = h[0]
                    }
                  }), l
                }, l.dataDimToCoordDim = function (t, e) {
                  var i = t[X];
                  e = t.getDimension(e);
                  for (var n = 0; n < i[ve]; n++) {
                    var r = t.getDimensionInfo(i[n]);
                    if (r.name === e) return r.coordDim
                  }
                }, l[$] = function (t, e) {
                  var i = [];
                  return o(t[X], function (n) {
                    var r = t.getDimensionInfo(n);
                    r.coordDim === e && (i[r.coordDimIndex] = r.name)
                  }), i
                }, l.otherDimToDataDim = function (t, e) {
                  var i = [];
                  return o(t[X], function (n) {
                    var r = t.getDimensionInfo(n),
                      a = r.otherDims,
                      o = a[e];
                    null != o && o !== !1 && (i[o] = r.name)
                  }), i
                }, l
              }), e("echarts/util/throttle", [], function () {
                var t = {},
                  e = "\x00__throttleOriginMethod",
                  i = "\x00__throttleRate",
                  n = "\x00__throttleType";
                return t.throttle = function (t, e, i) {
                  function n() {
                    c = (new Date).getTime(), h = null, t.apply(o, s || [])
                  }
                  var r, a, o, s, l, u = 0,
                    c = 0,
                    h = null;
                  e = e || 0;
                  var d = function () {
                    r = (new Date).getTime(), o = this, s = arguments;
                    var t = l || e,
                      d = l || i;
                    l = null, a = r - (d ? u : c) - t, clearTimeout(h), d ? h = setTimeout(n, t) : a >= 0 ? n() : h = setTimeout(n, -a), u = r
                  };
                  return d.clear = function () {
                    h && (clearTimeout(h), h = null)
                  }, d.debounceNextCall = function (t) {
                    l = t
                  }, d
                }, t.createOrUpdate = function (r, a, o, s) {
                  var l = r[a];
                  if (l) {
                    var u = l[e] || l,
                      c = l[n],
                      h = l[i];
                    if (h !== o || c !== s) {
                      if (null == o || !s) return r[a] = u;
                      l = r[a] = t.throttle(u, o, "debounce" === s), l[e] = u, l[n] = s, l[i] = o
                    }
                    return l
                  }
                }, t.clear = function (t, i) {
                  var n = t[i];
                  n && n[e] && (t[i] = n[e])
                }, t
              }), e("zrender/tool/color", [Ve, "../core/LRU"], function (t) {
                function e(t) {
                  return t = Math.round(t), 0 > t ? 0 : t > 255 ? 255 : t
                }

                function i(t) {
                  return t = Math.round(t), 0 > t ? 0 : t > 360 ? 360 : t
                }

                function n(t) {
                  return 0 > t ? 0 : t > 1 ? 1 : t
                }

                function r(t) {
                  return e(t[ve] && "%" === t.charAt(t[ve] - 1) ? parseFloat(t) / 100 * 255 : parseInt(t, 10))
                }

                function a(t) {
                  return n(t[ve] && "%" === t.charAt(t[ve] - 1) ? parseFloat(t) / 100 : parseFloat(t))
                }

                function o(t, e, i) {
                  return 0 > i ? i += 1 : i > 1 && (i -= 1), 1 > 6 * i ? t + (e - t) * i * 6 : 1 > 2 * i ? e : 2 > 3 * i ? t + (e - t) * (2 / 3 - i) * 6 : t
                }

                function s(t, e, i) {
                  return t + (e - t) * i
                }

                function l(t, e, i, n, r) {
                  return t[0] = e, t[1] = i, t[2] = n, t[3] = r, t
                }

                function u(t, e) {
                  return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t
                }

                function c(t, e) {
                  S && u(S, e), S = T.put(t, S || e.slice())
                }

                function h(t, e) {
                  if (t) {
                    e = e || [];
                    var i = T.get(t);
                    if (i) return u(e, i);
                    t += "";
                    var n = t[x](/ /g, "")[z]();
                    if (n in M) return u(e, M[n]), c(t, e), e;
                    if ("#" !== n.charAt(0)) {
                      var o = n[ce]("("),
                        s = n[ce](")");
                      if (-1 !== o && s + 1 === n[ve]) {
                        var h = n.substr(0, o),
                          f = n.substr(o + 1, s - (o + 1)).split(","),
                          p = 1;
                        switch (h) {
                          case "rgba":
                            if (4 !== f[ve]) return void l(e, 0, 0, 0, 1);
                            p = a(f.pop());
                          case "rgb":
                            return 3 !== f[ve] ? void l(e, 0, 0, 0, 1) : (l(e, r(f[0]), r(f[1]), r(f[2]), p), c(t, e), e);
                          case "hsla":
                            return 4 !== f[ve] ? void l(e, 0, 0, 0, 1) : (f[3] = a(f[3]), d(f, e), c(t, e), e);
                          case "hsl":
                            return 3 !== f[ve] ? void l(e, 0, 0, 0, 1) : (d(f, e), c(t, e), e);
                          default:
                            return
                        }
                      }
                      l(e, 0, 0, 0, 1)
                    } else {
                      if (4 === n[ve]) {
                        var m = parseInt(n.substr(1), 16);
                        return m >= 0 && 4095 >= m ? (l(e, (3840 & m) >> 4 | (3840 & m) >> 8, 240 & m | (240 & m) >> 4, 15 & m | (15 & m) << 4, 1), c(t, e), e) : void l(e, 0, 0, 0, 1)
                      }
                      if (7 === n[ve]) {
                        var m = parseInt(n.substr(1), 16);
                        return m >= 0 && 16777215 >= m ? (l(e, (16711680 & m) >> 16, (65280 & m) >> 8, 255 & m, 1), c(t, e), e) : void l(e, 0, 0, 0, 1)
                      }
                    }
                  }
                }

                function d(t, i) {
                  var n = (parseFloat(t[0]) % 360 + 360) % 360 / 360,
                    r = a(t[1]),
                    s = a(t[2]),
                    u = .5 >= s ? s * (r + 1) : s + r - s * r,
                    c = 2 * s - u;
                  return i = i || [], l(i, e(255 * o(c, u, n + 1 / 3)), e(255 * o(c, u, n)), e(255 * o(c, u, n - 1 / 3)), 1), 4 === t[ve] && (i[3] = t[3]), i
                }

                function f(t) {
                  if (t) {
                    var e, i, n = t[0] / 255,
                      r = t[1] / 255,
                      a = t[2] / 255,
                      o = Math.min(n, r, a),
                      s = Math.max(n, r, a),
                      l = s - o,
                      u = (s + o) / 2;
                    if (0 === l) e = 0, i = 0;
                    else {
                      i = .5 > u ? l / (s + o) : l / (2 - s - o);
                      var c = ((s - n) / 6 + l / 2) / l,
                        h = ((s - r) / 6 + l / 2) / l,
                        d = ((s - a) / 6 + l / 2) / l;
                      n === s ? e = d - h : r === s ? e = 1 / 3 + c - d : a === s && (e = 2 / 3 + h - c), 0 > e && (e += 1), e > 1 && (e -= 1)
                    }
                    var f = [360 * e, i, u];
                    return null != t[3] && f.push(t[3]), f
                  }
                }

                function p(t, e) {
                  var i = h(t);
                  if (i) {
                    for (var n = 0; 3 > n; n++) i[n] = 0 > e ? i[n] * (1 - e) | 0 : (255 - i[n]) * e + i[n] | 0;
                    return b(i, 4 === i[ve] ? "rgba" : "rgb")
                  }
                }

                function m(t) {
                  var e = h(t);
                  return e ? ((1 << 24) + (e[0] << 16) + (e[1] << 8) + +e[2]).toString(16).slice(1) : void 0
                }

                function v(t, i, r) {
                  if (i && i[ve] && t >= 0 && 1 >= t) {
                    r = r || [];
                    var a = t * (i[ve] - 1),
                      o = Math.floor(a),
                      l = Math.ceil(a),
                      u = i[o],
                      c = i[l],
                      h = a - o;
                    return r[0] = e(s(u[0], c[0], h)), r[1] = e(s(u[1], c[1], h)), r[2] = e(s(u[2], c[2], h)), r[3] = n(s(u[3], c[3], h)), r
                  }
                }

                function g(t, i, r) {
                  if (i && i[ve] && t >= 0 && 1 >= t) {
                    var a = t * (i[ve] - 1),
                      o = Math.floor(a),
                      l = Math.ceil(a),
                      u = h(i[o]),
                      c = h(i[l]),
                      d = a - o,
                      f = b([e(s(u[0], c[0], d)), e(s(u[1], c[1], d)), e(s(u[2], c[2], d)), n(s(u[3], c[3], d))], "rgba");
                    return r ? {
                      color: f,
                      leftIndex: o,
                      rightIndex: l,
                      value: a
                    } : f
                  }
                }

                function y(t, e, n, r) {
                  return t = h(t), t ? (t = f(t), null != e && (t[0] = i(e)), null != n && (t[1] = a(n)), null != r && (t[2] = a(r)), b(d(t), "rgba")) : void 0
                }

                function _(t, e) {
                  return t = h(t), t && null != e ? (t[3] = n(e), b(t, "rgba")) : void 0
                }

                function b(t, e) {
                  if (t && t[ve]) {
                    var i = t[0] + "," + t[1] + "," + t[2];
                    return ("rgba" === e || "hsva" === e || "hsla" === e) && (i += "," + t[3]), e + "(" + i + ")"
                  }
                }
                var w = t("../core/LRU"),
                  M = {
                    transparent: [0, 0, 0, 0],
                    aliceblue: [240, 248, 255, 1],
                    antiquewhite: [250, 235, 215, 1],
                    aqua: [0, 255, 255, 1],
                    aquamarine: [127, 255, 212, 1],
                    azure: [240, 255, 255, 1],
                    beige: [245, 245, 220, 1],
                    bisque: [255, 228, 196, 1],
                    black: [0, 0, 0, 1],
                    blanchedalmond: [255, 235, 205, 1],
                    blue: [0, 0, 255, 1],
                    blueviolet: [138, 43, 226, 1],
                    brown: [165, 42, 42, 1],
                    burlywood: [222, 184, 135, 1],
                    cadetblue: [95, 158, 160, 1],
                    chartreuse: [127, 255, 0, 1],
                    chocolate: [210, 105, 30, 1],
                    coral: [255, 127, 80, 1],
                    cornflowerblue: [100, 149, 237, 1],
                    cornsilk: [255, 248, 220, 1],
                    crimson: [220, 20, 60, 1],
                    cyan: [0, 255, 255, 1],
                    darkblue: [0, 0, 139, 1],
                    darkcyan: [0, 139, 139, 1],
                    darkgoldenrod: [184, 134, 11, 1],
                    darkgray: [169, 169, 169, 1],
                    darkgreen: [0, 100, 0, 1],
                    darkgrey: [169, 169, 169, 1],
                    darkkhaki: [189, 183, 107, 1],
                    darkmagenta: [139, 0, 139, 1],
                    darkolivegreen: [85, 107, 47, 1],
                    darkorange: [255, 140, 0, 1],
                    darkorchid: [153, 50, 204, 1],
                    darkred: [139, 0, 0, 1],
                    darksalmon: [233, 150, 122, 1],
                    darkseagreen: [143, 188, 143, 1],
                    darkslateblue: [72, 61, 139, 1],
                    darkslategray: [47, 79, 79, 1],
                    darkslategrey: [47, 79, 79, 1],
                    darkturquoise: [0, 206, 209, 1],
                    darkviolet: [148, 0, 211, 1],
                    deeppink: [255, 20, 147, 1],
                    deepskyblue: [0, 191, 255, 1],
                    dimgray: [105, 105, 105, 1],
                    dimgrey: [105, 105, 105, 1],
                    dodgerblue: [30, 144, 255, 1],
                    firebrick: [178, 34, 34, 1],
                    floralwhite: [255, 250, 240, 1],
                    forestgreen: [34, 139, 34, 1],
                    fuchsia: [255, 0, 255, 1],
                    gainsboro: [220, 220, 220, 1],
                    ghostwhite: [248, 248, 255, 1],
                    gold: [255, 215, 0, 1],
                    goldenrod: [218, 165, 32, 1],
                    gray: [128, 128, 128, 1],
                    green: [0, 128, 0, 1],
                    greenyellow: [173, 255, 47, 1],
                    grey: [128, 128, 128, 1],
                    honeydew: [240, 255, 240, 1],
                    hotpink: [255, 105, 180, 1],
                    indianred: [205, 92, 92, 1],
                    indigo: [75, 0, 130, 1],
                    ivory: [255, 255, 240, 1],
                    khaki: [240, 230, 140, 1],
                    lavender: [230, 230, 250, 1],
                    lavenderblush: [255, 240, 245, 1],
                    lawngreen: [124, 252, 0, 1],
                    lemonchiffon: [255, 250, 205, 1],
                    lightblue: [173, 216, 230, 1],
                    lightcoral: [240, 128, 128, 1],
                    lightcyan: [224, 255, 255, 1],
                    lightgoldenrodyellow: [250, 250, 210, 1],
                    lightgray: [211, 211, 211, 1],
                    lightgreen: [144, 238, 144, 1],
                    lightgrey: [211, 211, 211, 1],
                    lightpink: [255, 182, 193, 1],
                    lightsalmon: [255, 160, 122, 1],
                    lightseagreen: [32, 178, 170, 1],
                    lightskyblue: [135, 206, 250, 1],
                    lightslategray: [119, 136, 153, 1],
                    lightslategrey: [119, 136, 153, 1],
                    lightsteelblue: [176, 196, 222, 1],
                    lightyellow: [255, 255, 224, 1],
                    lime: [0, 255, 0, 1],
                    limegreen: [50, 205, 50, 1],
                    linen: [250, 240, 230, 1],
                    magenta: [255, 0, 255, 1],
                    maroon: [128, 0, 0, 1],
                    mediumaquamarine: [102, 205, 170, 1],
                    mediumblue: [0, 0, 205, 1],
                    mediumorchid: [186, 85, 211, 1],
                    mediumpurple: [147, 112, 219, 1],
                    mediumseagreen: [60, 179, 113, 1],
                    mediumslateblue: [123, 104, 238, 1],
                    mediumspringgreen: [0, 250, 154, 1],
                    mediumturquoise: [72, 209, 204, 1],
                    mediumvioletred: [199, 21, 133, 1],
                    midnightblue: [25, 25, 112, 1],
                    mintcream: [245, 255, 250, 1],
                    mistyrose: [255, 228, 225, 1],
                    moccasin: [255, 228, 181, 1],
                    navajowhite: [255, 222, 173, 1],
                    navy: [0, 0, 128, 1],
                    oldlace: [253, 245, 230, 1],
                    olive: [128, 128, 0, 1],
                    olivedrab: [107, 142, 35, 1],
                    orange: [255, 165, 0, 1],
                    orangered: [255, 69, 0, 1],
                    orchid: [218, 112, 214, 1],
                    palegoldenrod: [238, 232, 170, 1],
                    palegreen: [152, 251, 152, 1],
                    paleturquoise: [175, 238, 238, 1],
                    palevioletred: [219, 112, 147, 1],
                    papayawhip: [255, 239, 213, 1],
                    peachpuff: [255, 218, 185, 1],
                    peru: [205, 133, 63, 1],
                    pink: [255, 192, 203, 1],
                    plum: [221, 160, 221, 1],
                    powderblue: [176, 224, 230, 1],
                    purple: [128, 0, 128, 1],
                    red: [255, 0, 0, 1],
                    rosybrown: [188, 143, 143, 1],
                    royalblue: [65, 105, 225, 1],
                    saddlebrown: [139, 69, 19, 1],
                    salmon: [250, 128, 114, 1],
                    sandybrown: [244, 164, 96, 1],
                    seagreen: [46, 139, 87, 1],
                    seashell: [255, 245, 238, 1],
                    sienna: [160, 82, 45, 1],
                    silver: [192, 192, 192, 1],
                    skyblue: [135, 206, 235, 1],
                    slateblue: [106, 90, 205, 1],
                    slategray: [112, 128, 144, 1],
                    slategrey: [112, 128, 144, 1],
                    snow: [255, 250, 250, 1],
                    springgreen: [0, 255, 127, 1],
                    steelblue: [70, 130, 180, 1],
                    tan: [210, 180, 140, 1],
                    teal: [0, 128, 128, 1],
                    thistle: [216, 191, 216, 1],
                    tomato: [255, 99, 71, 1],
                    turquoise: [64, 224, 208, 1],
                    violet: [238, 130, 238, 1],
                    wheat: [245, 222, 179, 1],
                    white: [255, 255, 255, 1],
                    whitesmoke: [245, 245, 245, 1],
                    yellow: [255, 255, 0, 1],
                    yellowgreen: [154, 205, 50, 1]
                  },
                  T = new w(20),
                  S = null;
                return {
                  parse: h,
                  lift: p,
                  toHex: m,
                  fastMapToColor: v,
                  mapToColor: g,
                  modifyHSL: y,
                  modifyAlpha: _,
                  stringify: b
                }
              }), e("zrender/mixin/Eventful", [Ve], function () {
                var t = Array[ye].slice,
                  e = function () {
                    this._$handlers = {}
                  };
                return e[ye] = {
                  constructor: e,
                  one: function (t, e, i) {
                    var n = this._$handlers;
                    if (!e || !t) return this;
                    n[t] || (n[t] = []);
                    for (var r = 0; r < n[t][ve]; r++)
                      if (n[t][r].h === e) return this;
                    return n[t].push({
                      h: e,
                      one: !0,
                      ctx: i || this
                    }), this
                  },
                  on: function (t, e, i) {
                    var n = this._$handlers;
                    if (!e || !t) return this;
                    n[t] || (n[t] = []);
                    for (var r = 0; r < n[t][ve]; r++)
                      if (n[t][r].h === e) return this;
                    return n[t].push({
                      h: e,
                      one: !1,
                      ctx: i || this
                    }), this
                  },
                  isSilent: function (t) {
                    var e = this._$handlers;
                    return e[t] && e[t][ve]
                  },
                  off: function (t, e) {
                    var i = this._$handlers;
                    if (!t) return this._$handlers = {}, this;
                    if (e) {
                      if (i[t]) {
                        for (var n = [], r = 0, a = i[t][ve]; a > r; r++) i[t][r].h != e && n.push(i[t][r]);
                        i[t] = n
                      }
                      i[t] && 0 === i[t][ve] && delete i[t]
                    } else delete i[t];
                    return this
                  },
                  trigger: function (e) {
                    if (this._$handlers[e]) {
                      var i = arguments,
                        n = i[ve];
                      n > 3 && (i = t.call(i, 1));
                      for (var r = this._$handlers[e], a = r[ve], o = 0; a > o;) {
                        switch (n) {
                          case 1:
                            r[o].h.call(r[o].ctx);
                            break;
                          case 2:
                            r[o].h.call(r[o].ctx, i[1]);
                            break;
                          case 3:
                            r[o].h.call(r[o].ctx, i[1], i[2]);
                            break;
                          default:
                            r[o].h.apply(r[o].ctx, i)
                        }
                        r[o].one ? (r[M](o, 1), a--) : o++
                      }
                    }
                    return this
                  },
                  triggerWithContext: function (e) {
                    if (this._$handlers[e]) {
                      var i = arguments,
                        n = i[ve];
                      n > 4 && (i = t.call(i, 1, i[ve] - 1));
                      for (var r = i[i[ve] - 1], a = this._$handlers[e], o = a[ve], s = 0; o > s;) {
                        switch (n) {
                          case 1:
                            a[s].h.call(r);
                            break;
                          case 2:
                            a[s].h.call(r, i[1]);
                            break;
                          case 3:
                            a[s].h.call(r, i[1], i[2]);
                            break;
                          default:
                            a[s].h.apply(r, i)
                        }
                        a[s].one ? (a[M](s, 1), o--) : s++
                      }
                    }
                    return this
                  }
                }, e
              }), e("zrender/core/timsort", [], function () {
                function t(t) {
                  for (var e = 0; t >= l;) e |= 1 & t, t >>= 1;
                  return t + e
                }

                function e(t, e, n, r) {
                  var a = e + 1;
                  if (a === n) return 1;
                  if (r(t[a++], t[e]) < 0) {
                    for (; n > a && r(t[a], t[a - 1]) < 0;) a++;
                    i(t, e, a)
                  } else
                    for (; n > a && r(t[a], t[a - 1]) >= 0;) a++;
                  return a - e
                }

                function i(t, e, i) {
                  for (i--; i > e;) {
                    var n = t[e];
                    t[e++] = t[i], t[i--] = n
                  }
                }

                function n(t, e, i, n, r) {
                  for (n === e && n++; i > n; n++) {
                    for (var a, o = t[n], s = e, l = n; l > s;) a = s + l >>> 1, r(o, t[a]) < 0 ? l = a : s = a + 1;
                    var u = n - s;
                    switch (u) {
                      case 3:
                        t[s + 3] = t[s + 2];
                      case 2:
                        t[s + 2] = t[s + 1];
                      case 1:
                        t[s + 1] = t[s];
                        break;
                      default:
                        for (; u > 0;) t[s + u] = t[s + u - 1], u--
                    }
                    t[s] = o
                  }
                }

                function r(t, e, i, n, r, a) {
                  var o = 0,
                    s = 0,
                    l = 1;
                  if (a(t, e[i + r]) > 0) {
                    for (s = n - r; s > l && a(t, e[i + r + l]) > 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s);
                    l > s && (l = s), o += r, l += r
                  } else {
                    for (s = r + 1; s > l && a(t, e[i + r - l]) <= 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s);
                    l > s && (l = s);
                    var u = o;
                    o = r - l, l = r - u
                  }
                  for (o++; l > o;) {
                    var c = o + (l - o >>> 1);
                    a(t, e[i + c]) > 0 ? o = c + 1 : l = c
                  }
                  return l
                }

                function a(t, e, i, n, r, a) {
                  var o = 0,
                    s = 0,
                    l = 1;
                  if (a(t, e[i + r]) < 0) {
                    for (s = r + 1; s > l && a(t, e[i + r - l]) < 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s);
                    l > s && (l = s);
                    var u = o;
                    o = r - l, l = r - u
                  } else {
                    for (s = n - r; s > l && a(t, e[i + r + l]) >= 0;) o = l, l = (l << 1) + 1, 0 >= l && (l = s);
                    l > s && (l = s), o += r, l += r
                  }
                  for (o++; l > o;) {
                    var c = o + (l - o >>> 1);
                    a(t, e[i + c]) < 0 ? l = c : o = c + 1
                  }
                  return l
                }

                function o(t, e) {
                  function i(t, e) {
                    d[y] = t, f[y] = e, y += 1
                  }

                  function n() {
                    for (; y > 1;) {
                      var t = y - 2;
                      if (t >= 1 && f[t - 1] <= f[t] + f[t + 1] || t >= 2 && f[t - 2] <= f[t] + f[t - 1]) f[t - 1] < f[t + 1] && t--;
                      else if (f[t] > f[t + 1]) break;
                      s(t)
                    }
                  }

                  function o() {
                    for (; y > 1;) {
                      var t = y - 2;
                      t > 0 && f[t - 1] < f[t + 1] && t--, s(t)
                    }
                  }

                  function s(i) {
                    var n = d[i],
                      o = f[i],
                      s = d[i + 1],
                      u = f[i + 1];
                    f[i] = o + u, i === y - 3 && (d[i + 1] = d[i + 2], f[i + 1] = f[i + 2]), y--;
                    var c = a(t[s], t, n, o, 0, e);
                    n += c, o -= c, 0 !== o && (u = r(t[n + o - 1], t, s, u, u - 1, e), 0 !== u && (u >= o ? l(n, o, s, u) : h(n, o, s, u)))
                  }

                  function l(i, n, o, s) {
                    var l = 0;
                    for (l = 0; n > l; l++) x[l] = t[i + l];
                    var c = 0,
                      h = o,
                      d = i;
                    if (t[d++] = t[h++], 0 !== --s) {
                      if (1 === n) {
                        for (l = 0; s > l; l++) t[d + l] = t[h + l];
                        return void(t[d + s] = x[c])
                      }
                      for (var f, m, v, g = p;;) {
                        f = 0, m = 0, v = !1;
                        do
                          if (e(t[h], x[c]) < 0) {
                            if (t[d++] = t[h++], m++, f = 0, 0 === --s) {
                              v = !0;
                              break
                            }
                          } else if (t[d++] = x[c++], f++, m = 0, 1 === --n) {
                          v = !0;
                          break
                        } while (g > (f | m));
                        if (v) break;
                        do {
                          if (f = a(t[h], x, c, n, 0, e), 0 !== f) {
                            for (l = 0; f > l; l++) t[d + l] = x[c + l];
                            if (d += f, c += f, n -= f, 1 >= n) {
                              v = !0;
                              break
                            }
                          }
                          if (t[d++] = t[h++], 0 === --s) {
                            v = !0;
                            break
                          }
                          if (m = r(x[c], t, h, s, 0, e), 0 !== m) {
                            for (l = 0; m > l; l++) t[d + l] = t[h + l];
                            if (d += m, h += m, s -= m, 0 === s) {
                              v = !0;
                              break
                            }
                          }
                          if (t[d++] = x[c++], 1 === --n) {
                            v = !0;
                            break
                          }
                          g--
                        } while (f >= u || m >= u);
                        if (v) break;
                        0 > g && (g = 0), g += 2
                      }
                      if (p = g, 1 > p && (p = 1), 1 === n) {
                        for (l = 0; s > l; l++) t[d + l] = t[h + l];
                        t[d + s] = x[c]
                      } else {
                        if (0 === n) throw new Error;
                        for (l = 0; n > l; l++) t[d + l] = x[c + l]
                      }
                    } else
                      for (l = 0; n > l; l++) t[d + l] = x[c + l]
                  }

                  function h(i, n, o, s) {
                    var l = 0;
                    for (l = 0; s > l; l++) x[l] = t[o + l];
                    var c = i + n - 1,
                      h = s - 1,
                      d = o + s - 1,
                      f = 0,
                      m = 0;
                    if (t[d--] = t[c--], 0 !== --n) {
                      if (1 === s) {
                        for (d -= n, c -= n, m = d + 1, f = c + 1, l = n - 1; l >= 0; l--) t[m + l] = t[f + l];
                        return void(t[d] = x[h])
                      }
                      for (var v = p;;) {
                        var g = 0,
                          y = 0,
                          _ = !1;
                        do
                          if (e(x[h], t[c]) < 0) {
                            if (t[d--] = t[c--], g++, y = 0, 0 === --n) {
                              _ = !0;
                              break
                            }
                          } else if (t[d--] = x[h--], y++, g = 0, 1 === --s) {
                          _ = !0;
                          break
                        } while (v > (g | y));
                        if (_) break;
                        do {
                          if (g = n - a(x[h], t, i, n, n - 1, e), 0 !== g) {
                            for (d -= g, c -= g, n -= g, m = d + 1, f = c + 1, l = g - 1; l >= 0; l--) t[m + l] = t[f + l];
                            if (0 === n) {
                              _ = !0;
                              break
                            }
                          }
                          if (t[d--] = x[h--], 1 === --s) {
                            _ = !0;
                            break
                          }
                          if (y = s - r(t[c], x, 0, s, s - 1, e), 0 !== y) {
                            for (d -= y, h -= y, s -= y, m = d + 1, f = h + 1, l = 0; y > l; l++) t[m + l] = x[f + l];
                            if (1 >= s) {
                              _ = !0;
                              break
                            }
                          }
                          if (t[d--] = t[c--], 0 === --n) {
                            _ = !0;
                            break
                          }
                          v--
                        } while (g >= u || y >= u);
                        if (_) break;
                        0 > v && (v = 0), v += 2
                      }
                      if (p = v, 1 > p && (p = 1), 1 === s) {
                        for (d -= n, c -= n, m = d + 1, f = c + 1, l = n - 1; l >= 0; l--) t[m + l] = t[f + l];
                        t[d] = x[h]
                      } else {
                        if (0 === s) throw new Error;
                        for (f = d - (s - 1), l = 0; s > l; l++) t[f + l] = x[l]
                      }
                    } else
                      for (f = d - (s - 1), l = 0; s > l; l++) t[f + l] = x[l]
                  }
                  var d, f, p = u,
                    m = 0,
                    v = c,
                    g = 0,
                    y = 0;
                  m = t[ve], 2 * c > m && (v = m >>> 1);
                  var x = [];
                  g = 120 > m ? 5 : 1542 > m ? 10 : 119151 > m ? 19 : 40, d = [], f = [], this.mergeRuns = n, this.forceMergeRuns = o, this.pushRun = i
                }

                function s(i, r, a, s) {
                  a || (a = 0), s || (s = i[ve]);
                  var u = s - a;
                  if (!(2 > u)) {
                    var c = 0;
                    if (l > u) return c = e(i, a, s, r), void n(i, a, s, a + c, r);
                    var h = new o(i, r),
                      d = t(u);
                    do {
                      if (c = e(i, a, s, r), d > c) {
                        var f = u;
                        f > d && (f = d), n(i, a, a + f, a + c, r), c = f
                      }
                      h.pushRun(a, c), h.mergeRuns(), u -= c, a += c
                    } while (0 !== u);
                    h.forceMergeRuns()
                  }
                }
                var l = 32,
                  u = 7,
                  c = 256;
                return s
              }), e("echarts/visual/seriesColor", [Ve, "zrender/graphic/Gradient"], function (t) {
                var e = t("zrender/graphic/Gradient");
                return function (t) {
                  function i(i) {
                    var n = (i.visualColorAccessPath || "itemStyle.normal.color").split("."),
                      r = i[Ne](),
                      a = i.get(n) || i.getColorFromPalette(i.get("name"));
                    r.setVisual("color", a), t.isSeriesFiltered(i) || (typeof a !== oe || a instanceof e || r.each(function (t) {
                      r.setItemVisual(t, "color", a(i[w](t)))
                    }), r.each(function (t) {
                      var e = r[q](t),
                        i = e.get(n, !0);
                      null != i && r.setItemVisual(t, "color", i)
                    }))
                  }
                  t.eachRawSeries(i)
                }
              }), e("echarts/preprocessor/backwardCompat", [Ve, Fe, "./helper/compatStyle"], function (t) {
                function e(t, e) {
                  e = e.split(",");
                  for (var i = t, n = 0; n < e[ve] && (i = i && i[e[n]], null != i); n++);
                  return i
                }

                function i(t, e, i, n) {
                  e = e.split(",");
                  for (var r, a = t, o = 0; o < e[ve] - 1; o++) r = e[o], null == a[r] && (a[r] = {}), a = a[r];
                  (n || null == a[e[o]]) && (a[e[o]] = i)
                }

                function n(t) {
                  u(o, function (e) {
                    e[0] in t && !(e[1] in t) && (t[e[1]] = t[e[0]])
                  })
                }
                var r = t(Fe),
                  a = t("./helper/compatStyle"),
                  o = [
                    ["x", "left"],
                    ["y", "top"],
                    ["x2", "right"],
                    ["y2", we]
                  ],
                  s = ["grid", "geo", "parallel", "legend", "toolbox", "title", "visualMap", "dataZoom", "timeline"],
                  l = ["bar", "boxplot", "candlestick", "chord", "effectScatter", "funnel", "gauge", "lines", "graph", "heatmap", "line", "map", "parallel", "pie", "radar", "sankey", "scatter", "treemap"],
                  u = r.each;
                return function (t) {
                  u(t[C], function (t) {
                    if (r[ie](t)) {
                      var o = t.type;
                      if (a(t), ("pie" === o || "gauge" === o) && null != t.clockWise && (t.clockwise = t.clockWise), "gauge" === o) {
                        var s = e(t, "pointer.color");
                        null != s && i(t, "itemStyle.normal.color", s)
                      }
                      for (var u = 0; u < l[ve]; u++)
                        if (l[u] === t.type) {
                          n(t);
                          break
                        }
                    }
                  }), t.dataRange && (t.visualMap = t.dataRange), u(s, function (e) {
                    var i = t[e];
                    i && (r[y](i) || (i = [i]), u(i, function (t) {
                      n(t)
                    }))
                  })
                }
              }), e("echarts/loading/default", [Ve, "../util/graphic", Fe], function (t) {
                var e = t("../util/graphic"),
                  i = t(Fe),
                  n = Math.PI;
                return function (t, r) {
                  r = r || {}, i[Ee](r, {
                    text: "loading",
                    color: "#c23531",
                    textColor: "#000",
                    maskColor: "rgba(255, 255, 255, 0.8)",
                    zlevel: 0
                  });
                  var a = new e.Rect({
                      style: {
                        fill: r.maskColor
                      },
                      zlevel: r[_],
                      z: 1e4
                    }),
                    o = new e.Arc({
                      shape: {
                        startAngle: -n / 2,
                        endAngle: -n / 2 + .1,
                        r: 10
                      },
                      style: {
                        stroke: r.color,
                        lineCap: "round",
                        lineWidth: 5
                      },
                      zlevel: r[_],
                      z: 10001
                    }),
                    s = new e.Rect({
                      style: {
                        fill: "none",
                        text: r.text,
                        textPosition: "right",
                        textDistance: 10,
                        textFill: r.textColor
                      },
                      zlevel: r[_],
                      z: 10001
                    });
                  o.animateShape(!0).when(1e3, {
                    endAngle: 3 * n / 2
                  }).start("circularInOut"), o.animateShape(!0).when(1e3, {
                    startAngle: 3 * n / 2
                  }).delay(300).start("circularInOut");
                  var l = new e.Group;
                  return l.add(o), l.add(s), l.add(a), l.resize = function () {
                    var e = t[Pe]() / 2,
                      i = t[Se]() / 2;
                    o.setShape({
                      cx: e,
                      cy: i
                    });
                    var n = o.shape.r;
                    s.setShape({
                      x: e - n,
                      y: i - n,
                      width: 2 * n,
                      height: 2 * n
                    }), a.setShape({
                      x: 0,
                      y: 0,
                      width: t[Pe](),
                      height: t[Se]()
                    })
                  }, l.resize(), l
                }
              }), e("echarts/model/Model", [Ve, Fe, "../util/clazz", D, "./mixin/lineStyle", "./mixin/areaStyle", "./mixin/textStyle", "./mixin/itemStyle"], function (t) {
                function e(t, e, i) {
                  this.parentModel = e, this[pe] = i, this[c] = t
                }

                function i(t, e, i) {
                  for (var n = 0; n < e[ve] && (!e[n] || (t = t && "object" == typeof t ? t[e[n]] : null, null != t)); n++);
                  return null == t && i && (t = i.get(e)), t
                }

                function n(t, e) {
                  var i = a.get(t, "getParent");
                  return i ? i.call(t, e) : t.parentModel
                }
                var r = t(Fe),
                  a = t("../util/clazz"),
                  o = t(D);
                e[ye] = {
                  constructor: e,
                  init: null,
                  mergeOption: function (t) {
                    r.merge(this[c], t, !0)
                  },
                  get: function (t, e) {
                    return null == t ? this[c] : i(this[c], this.parsePath(t), !e && n(this, t))
                  },
                  getShallow: function (t, e) {
                    var i = this[c],
                      r = null == i ? i : i[t],
                      a = !e && n(this, t);
                    return null == r && a && (r = a[R](t)), r
                  },
                  getModel: function (t, r) {
                    var a, o = null == t ? this[c] : i(this[c], t = this.parsePath(t));
                    return r = r || (a = n(this, t)) && a[Oe](t), new e(o, r, this[pe])
                  },
                  isEmpty: function () {
                    return null == this[c]
                  },
                  restoreData: function () {},
                  clone: function () {
                    var t = this.constructor;
                    return new t(r.clone(this[c]))
                  },
                  setReadOnly: function (t) {
                    a.setReadOnly(this, t)
                  },
                  parsePath: function (t) {
                    return typeof t === ue && (t = t.split(".")), t
                  },
                  customizeGetParent: function (t) {
                    a.set(this, "getParent", t)
                  },
                  isAnimationEnabled: function () {
                    if (!o.node) {
                      if (null != this[c][H]) return !!this[c][H];
                      if (this.parentModel) return this.parentModel.isAnimationEnabled()
                    }
                  }
                }, a.enableClassExtend(e);
                var s = r.mixin;
                return s(e, t("./mixin/lineStyle")), s(e, t("./mixin/areaStyle")), s(e, t("./mixin/textStyle")), s(e, t("./mixin/itemStyle")), e
              }), e("echarts/coord/Axis", [Ve, "../util/number", Fe, "./axisHelper"], function (t) {
                function e(t, e) {
                  var i = t[1] - t[0],
                    n = e,
                    r = i / n / 2;
                  t[0] += r, t[1] -= r
                }
                var i = t("../util/number"),
                  n = i.linearMap,
                  r = t(Fe),
                  a = t("./axisHelper"),
                  o = [0, 1],
                  s = function (t, e, i) {
                    this.dim = t, this.scale = e, this._extent = i || [0, 0], this.inverse = !1, this.onBand = !1, this._labelInterval
                  };
                return s[ye] = {
                  constructor: s,
                  contain: function (t) {
                    var e = this._extent,
                      i = Math.min(e[0], e[1]),
                      n = Math.max(e[0], e[1]);
                    return t >= i && n >= t
                  },
                  containData: function (t) {
                    return this.contain(this[J](t))
                  },
                  getExtent: function () {
                    return this._extent.slice()
                  },
                  getPixelPrecision: function (t) {
                    return i.getPixelPrecision(t || this.scale[fe](), this._extent)
                  },
                  setExtent: function (t, e) {
                    var i = this._extent;
                    i[0] = t, i[1] = e
                  },
                  dataToCoord: function (t, i) {
                    var r = this._extent,
                      a = this.scale;
                    return t = a.normalize(t), this.onBand && a.type === m && (r = r.slice(), e(r, a.count())), n(t, o, r, i)
                  },
                  coordToData: function (t, i) {
                    var r = this._extent,
                      a = this.scale;
                    this.onBand && a.type === m && (r = r.slice(), e(r, a.count()));
                    var s = n(t, r, o, i);
                    return this.scale.scale(s)
                  },
                  pointToData: function () {},
                  getTicksCoords: function (t) {
                    if (this.onBand && !t) {
                      for (var e = this.getBands(), i = [], n = 0; n < e[ve]; n++) i.push(e[n][0]);
                      return e[n - 1] && i.push(e[n - 1][1]), i
                    }
                    return r.map(this.scale.getTicks(), this[J], this)
                  },
                  getLabelsCoords: function () {
                    return r.map(this.scale.getTicks(), this[J], this)
                  },
                  getBands: function () {
                    for (var t = this[fe](), e = [], i = this.scale.count(), n = t[0], r = t[1], a = r - n, o = 0; i > o; o++) e.push([a * o / i + n, a * (o + 1) / i + n]);
                    return e
                  },
                  getBandWidth: function () {
                    var t = this._extent,
                      e = this.scale[fe](),
                      i = e[1] - e[0] + (this.onBand ? 1 : 0);
                    0 === i && (i = 1);
                    var n = Math.abs(t[1] - t[0]);
                    return Math.abs(n) / i
                  },
                  getLabelInterval: function () {
                    var t = this._labelInterval;
                    if (!t) {
                      var e = this.model,
                        i = e[Oe]("axisLabel"),
                        n = i.get("interval");
                      this.type !== re || "auto" !== n ? t = "auto" === n ? 0 : n : this.isHorizontal && (t = a.getAxisLabelInterval(r.map(this.scale.getTicks(), this[J], this), e.getFormattedLabels(), i[Oe](De)[Ie](), this.isHorizontal())), this._labelInterval = t
                    }
                    return t
                  }
                }, s
              }), e("zrender/core/matrix", [], function () {
                var t = typeof Float32Array === o ? Array : Float32Array,
                  e = {
                    create: function () {
                      var i = new t(6);
                      return e.identity(i), i
                    },
                    identity: function (t) {
                      return t[0] = 1, t[1] = 0, t[2] = 0, t[3] = 1, t[4] = 0, t[5] = 0, t
                    },
                    copy: function (t, e) {
                      return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t
                    },
                    mul: function (t, e, i) {
                      var n = e[0] * i[0] + e[2] * i[1],
                        r = e[1] * i[0] + e[3] * i[1],
                        a = e[0] * i[2] + e[2] * i[3],
                        o = e[1] * i[2] + e[3] * i[3],
                        s = e[0] * i[4] + e[2] * i[5] + e[4],
                        l = e[1] * i[4] + e[3] * i[5] + e[5];
                      return t[0] = n, t[1] = r, t[2] = a, t[3] = o, t[4] = s, t[5] = l, t
                    },
                    translate: function (t, e, i) {
                      return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4] + i[0], t[5] = e[5] + i[1], t
                    },
                    rotate: function (t, e, i) {
                      var n = e[0],
                        r = e[2],
                        a = e[4],
                        o = e[1],
                        s = e[3],
                        l = e[5],
                        u = Math.sin(i),
                        c = Math.cos(i);
                      return t[0] = n * c + o * u, t[1] = -n * u + o * c, t[2] = r * c + s * u, t[3] = -r * u + c * s, t[4] = c * a + u * l, t[5] = c * l - u * a, t
                    },
                    scale: function (t, e, i) {
                      var n = i[0],
                        r = i[1];
                      return t[0] = e[0] * n, t[1] = e[1] * r, t[2] = e[2] * n, t[3] = e[3] * r, t[4] = e[4] * n, t[5] = e[5] * r, t
                    },
                    invert: function (t, e) {
                      var i = e[0],
                        n = e[2],
                        r = e[4],
                        a = e[1],
                        o = e[3],
                        s = e[5],
                        l = i * o - a * n;
                      return l ? (l = 1 / l, t[0] = o * l, t[1] = -a * l, t[2] = -n * l, t[3] = i * l, t[4] = (n * s - o * r) * l, t[5] = (a * r - i * s) * l, t) : null
                    }
                  };
                return e
              }), e("zrender/core/vector", [], function () {
                var t = typeof Float32Array === o ? Array : Float32Array,
                  e = {
                    create: function (e, i) {
                      var n = new t(2);
                      return null == e && (e = 0), null == i && (i = 0), n[0] = e, n[1] = i, n
                    },
                    copy: function (t, e) {
                      return t[0] = e[0], t[1] = e[1], t
                    },
                    clone: function (e) {
                      var i = new t(2);
                      return i[0] = e[0], i[1] = e[1], i
                    },
                    set: function (t, e, i) {
                      return t[0] = e, t[1] = i, t
                    },
                    add: function (t, e, i) {
                      return t[0] = e[0] + i[0], t[1] = e[1] + i[1], t
                    },
                    scaleAndAdd: function (t, e, i, n) {
                      return t[0] = e[0] + i[0] * n, t[1] = e[1] + i[1] * n, t
                    },
                    sub: function (t, e, i) {
                      return t[0] = e[0] - i[0], t[1] = e[1] - i[1], t
                    },
                    len: function (t) {
                      return Math.sqrt(this.lenSquare(t))
                    },
                    lenSquare: function (t) {
                      return t[0] * t[0] + t[1] * t[1]
                    },
                    mul: function (t, e, i) {
                      return t[0] = e[0] * i[0], t[1] = e[1] * i[1], t
                    },
                    div: function (t, e, i) {
                      return t[0] = e[0] / i[0], t[1] = e[1] / i[1], t
                    },
                    dot: function (t, e) {
                      return t[0] * e[0] + t[1] * e[1]
                    },
                    scale: function (t, e, i) {
                      return t[0] = e[0] * i, t[1] = e[1] * i, t
                    },
                    normalize: function (t, i) {
                      var n = e.len(i);
                      return 0 === n ? (t[0] = 0, t[1] = 0) : (t[0] = i[0] / n, t[1] = i[1] / n), t
                    },
                    distance: function (t, e) {
                      return Math.sqrt((t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1]))
                    },
                    distanceSquare: function (t, e) {
                      return (t[0] - e[0]) * (t[0] - e[0]) + (t[1] - e[1]) * (t[1] - e[1])
                    },
                    negate: function (t, e) {
                      return t[0] = -e[0], t[1] = -e[1], t
                    },
                    lerp: function (t, e, i, n) {
                      return t[0] = e[0] + n * (i[0] - e[0]), t[1] = e[1] + n * (i[1] - e[1]), t
                    },
                    applyTransform: function (t, e, i) {
                      var n = e[0],
                        r = e[1];
                      return t[0] = i[0] * n + i[2] * r + i[4], t[1] = i[1] * n + i[3] * r + i[5], t
                    },
                    min: function (t, e, i) {
                      return t[0] = Math.min(e[0], i[0]), t[1] = Math.min(e[1], i[1]), t
                    },
                    max: function (t, e, i) {
                      return t[0] = Math.max(e[0], i[0]), t[1] = Math.max(e[1], i[1]), t
                    }
                  };
                return e[ve] = e.len, e.lengthSquare = e.lenSquare, e.dist = e.distance, e.distSquare = e.distanceSquare, e
              }), e("echarts/helper", [Ve, "./chart/helper/createListFromArray", "./util/symbol", "./coord/axisHelper", "./coord/axisModelCommonMixin", "./model/Model", Fe, "./data/helper/completeDimensions"], function (t) {
                var e = t("./chart/helper/createListFromArray"),
                  i = t("./util/symbol"),
                  n = t("./coord/axisHelper"),
                  r = t("./coord/axisModelCommonMixin"),
                  a = t("./model/Model"),
                  o = t(Fe);
                return {
                  createList: function (t) {
                    var i = t.get("data");
                    return e(i, t, t[pe])
                  },
                  completeDimensions: t("./data/helper/completeDimensions"),
                  createSymbol: i.createSymbol,
                  createScale: function (t, e) {
                    var i = e;
                    e instanceof a || (i = new a(e), o.mixin(i, r));
                    var s = n.createScaleByModel(i);
                    return s.setExtent(t[0], t[1]), n.niceScaleExtent(s, i), s
                  },
                  mixinAxisModelCommonMethods: function (t) {
                    o.mixin(t, r)
                  }
                }
              }), e("zrender/tool/path", [Ve, "../graphic/Path", "../core/PathProxy", "./transformPath"], function (t) {
                function e(t, e, i, n, r, a, o, s, d, p, v) {
                  var g = d * (h / 180),
                    y = c(g) * (t - i) / 2 + u(g) * (e - n) / 2,
                    x = -1 * u(g) * (t - i) / 2 + c(g) * (e - n) / 2,
                    _ = y * y / (o * o) + x * x / (s * s);
                  _ > 1 && (o *= l(_), s *= l(_));
                  var b = (r === a ? -1 : 1) * l((o * o * s * s - o * o * x * x - s * s * y * y) / (o * o * x * x + s * s * y * y)) || 0,
                    w = b * o * x / s,
                    M = b * -s * y / o,
                    T = (t + i) / 2 + c(g) * w - u(g) * M,
                    S = (e + n) / 2 + u(g) * w + c(g) * M,
                    P = m([1, 0], [(y - w) / o, (x - M) / s]),
                    C = [(y - w) / o, (x - M) / s],
                    A = [(-1 * y - w) / o, (-1 * x - M) / s],
                    L = m(C, A);
                  f(C, A) <= -1 && (L = h), f(C, A) >= 1 && (L = 0), 0 === a && L > 0 && (L -= 2 * h), 1 === a && 0 > L && (L += 2 * h), v.addData(p, T, S, o, s, P, L, g, a)
                }

                function i(t) {
                  if (!t) return [];
                  var i, n = t[x](/-/g, " -")[x](/  /g, " ")[x](/ /g, ",")[x](/,,/g, ",");
                  for (i = 0; i < s[ve]; i++) n = n[x](new RegExp(s[i], "g"), "|" + s[i]);
                  var r, o = n.split("|"),
                    l = 0,
                    u = 0,
                    c = new a,
                    h = a.CMD;
                  for (i = 1; i < o[ve]; i++) {
                    var d, f = o[i],
                      p = f.charAt(0),
                      m = 0,
                      v = f.slice(1)[x](/e,-/g, "e-").split(",");
                    v[ve] > 0 && "" === v[0] && v.shift();
                    for (var g = 0; g < v[ve]; g++) v[g] = parseFloat(v[g]);
                    for (; m < v[ve] && !isNaN(v[m]) && !isNaN(v[0]);) {
                      var y, _, b, w, M, T, S, P = l,
                        C = u;
                      switch (p) {
                        case "l":
                          l += v[m++], u += v[m++], d = h.L, c.addData(d, l, u);
                          break;
                        case "L":
                          l = v[m++], u = v[m++], d = h.L, c.addData(d, l, u);
                          break;
                        case "m":
                          l += v[m++], u += v[m++], d = h.M, c.addData(d, l, u), p = "l";
                          break;
                        case "M":
                          l = v[m++], u = v[m++], d = h.M, c.addData(d, l, u), p = "L";
                          break;
                        case "h":
                          l += v[m++], d = h.L, c.addData(d, l, u);
                          break;
                        case "H":
                          l = v[m++], d = h.L, c.addData(d, l, u);
                          break;
                        case "v":
                          u += v[m++], d = h.L, c.addData(d, l, u);
                          break;
                        case "V":
                          u = v[m++], d = h.L, c.addData(d, l, u);
                          break;
                        case "C":
                          d = h.C, c.addData(d, v[m++], v[m++], v[m++], v[m++], v[m++], v[m++]), l = v[m - 2], u = v[m - 1];
                          break;
                        case "c":
                          d = h.C, c.addData(d, v[m++] + l, v[m++] + u, v[m++] + l, v[m++] + u, v[m++] + l, v[m++] + u), l += v[m - 2], u += v[m - 1];
                          break;
                        case "S":
                          y = l, _ = u;
                          var A = c.len(),
                            L = c.data;
                          r === h.C && (y += l - L[A - 4], _ += u - L[A - 3]), d = h.C, P = v[m++], C = v[m++], l = v[m++], u = v[m++], c.addData(d, y, _, P, C, l, u);
                          break;
                        case "s":
                          y = l, _ = u;
                          var A = c.len(),
                            L = c.data;
                          r === h.C && (y += l - L[A - 4], _ += u - L[A - 3]), d = h.C, P = l + v[m++], C = u + v[m++], l += v[m++], u += v[m++], c.addData(d, y, _, P, C, l, u);
                          break;
                        case "Q":
                          P = v[m++], C = v[m++], l = v[m++], u = v[m++], d = h.Q, c.addData(d, P, C, l, u);
                          break;
                        case "q":
                          P = v[m++] + l, C = v[m++] + u, l += v[m++], u += v[m++], d = h.Q, c.addData(d, P, C, l, u);
                          break;
                        case "T":
                          y = l, _ = u;
                          var A = c.len(),
                            L = c.data;
                          r === h.Q && (y += l - L[A - 4], _ += u - L[A - 3]), l = v[m++], u = v[m++], d = h.Q, c.addData(d, y, _, l, u);
                          break;
                        case "t":
                          y = l, _ = u;
                          var A = c.len(),
                            L = c.data;
                          r === h.Q && (y += l - L[A - 4], _ += u - L[A - 3]), l += v[m++], u += v[m++], d = h.Q, c.addData(d, y, _, l, u);
                          break;
                        case "A":
                          b = v[m++], w = v[m++], M = v[m++], T = v[m++], S = v[m++], P = l, C = u, l = v[m++], u = v[m++], d = h.A, e(P, C, l, u, T, S, b, w, M, d, c);
                          break;
                        case "a":
                          b = v[m++], w = v[m++], M = v[m++], T = v[m++], S = v[m++], P = l, C = u, l += v[m++], u += v[m++], d = h.A, e(P, C, l, u, T, S, b, w, M, d, c)
                      }
                    }("z" === p || "Z" === p) && (d = h.Z, c.addData(d)), r = d
                  }
                  return c.toStatic(), c
                }

                function n(t, e) {
                  var n = i(t);
                  return e = e || {}, e.buildPath = function (t) {
                    if (t.setData) {
                      t.setData(n.data);
                      var e = t.getContext();
                      e && t.rebuildPath(e)
                    } else {
                      var e = t;
                      n.rebuildPath(e)
                    }
                  }, e[p] = function (t) {
                    o(n, t), this.dirty(!0)
                  }, e
                }
                var r = t("../graphic/Path"),
                  a = t("../core/PathProxy"),
                  o = t("./transformPath"),
                  s = ["m", "M", "l", "L", "v", "V", "h", "H", "z", "Z", "c", "C", "q", "Q", "t", "T", "s", "S", "a", "A"],
                  l = Math.sqrt,
                  u = Math.sin,
                  c = Math.cos,
                  h = Math.PI,
                  d = function (t) {
                    return Math.sqrt(t[0] * t[0] + t[1] * t[1])
                  },
                  f = function (t, e) {
                    return (t[0] * e[0] + t[1] * e[1]) / (d(t) * d(e))
                  },
                  m = function (t, e) {
                    return (t[0] * e[1] < t[1] * e[0] ? -1 : 1) * Math.acos(f(t, e))
                  };
                return {
                  createFromString: function (t, e) {
                    return new r(n(t, e))
                  },
                  extendFromString: function (t, e) {
                    return r[ge](n(t, e))
                  },
                  mergePath: function (t, e) {
                    for (var i = [], n = t[ve], a = 0; n > a; a++) {
                      var o = t[a];
                      o.path || o.createPathProxy(), o.__dirtyPath && o.buildPath(o.path, o.shape, !0), i.push(o.path)
                    }
                    var s = new r(e);
                    return s.createPathProxy(), s.buildPath = function (t) {
                      t.appendPath(i);
                      var e = t.getContext();
                      e && t.rebuildPath(e)
                    }, s
                  }
                }
              }), e("zrender/graphic/Path", [Ve, "./Displayable", a, "../core/PathProxy", "../contain/path", "./Pattern"], function (t) {
                function e(t) {
                  i.call(this, t), this.path = null
                }
                var i = t("./Displayable"),
                  n = t(a),
                  r = t("../core/PathProxy"),
                  o = t("../contain/path"),
                  l = t("./Pattern"),
                  c = l[ye].getCanvasPattern,
                  h = Math.abs,
                  p = new r(!0);
                return e[ye] = {
                  constructor: e,
                  type: "path",
                  __dirtyPath: !0,
                  strokeContainThreshold: 5,
                  brush: function (t, e) {
                    var i = this.style,
                      n = this.path || p,
                      r = i.hasStroke(),
                      a = i.hasFill(),
                      o = i.fill,
                      l = i[d],
                      u = a && !!o[A],
                      h = r && !!l[A],
                      f = a && !!o.image,
                      m = r && !!l.image;
                    if (i.bind(t, this, e), this.setTransform(t), this[s]) {
                      var v;
                      u && (v = v || this[ke](), this._fillGradient = i.getGradient(t, o, v)), h && (v = v || this[ke](), this._strokeGradient = i.getGradient(t, l, v))
                    }
                    u ? t.fillStyle = this._fillGradient : f && (t.fillStyle = c.call(o, t)), h ? t.strokeStyle = this._strokeGradient : m && (t.strokeStyle = c.call(l, t));
                    var g = i.lineDash,
                      y = i.lineDashOffset,
                      x = !!t.setLineDash,
                      _ = this.getGlobalScale();
                    n.setScale(_[0], _[1]), this.__dirtyPath || g && !x && r ? (n.beginPath(t), g && !x && (n.setLineDash(g), n.setLineDashOffset(y)), this.buildPath(n, this.shape, !1), this.path && (this.__dirtyPath = !1)) : (t.beginPath(), this.path.rebuildPath(t)), a && n.fill(t), g && x && (t.setLineDash(g), t.lineDashOffset = y), r && n[d](t), g && x && t.setLineDash([]), this.restoreTransform(t), null != i.text && this.drawRectText(t, this[ke]())
                  },
                  buildPath: function () {},
                  createPathProxy: function () {
                    this.path = new r
                  },
                  getBoundingRect: function () {
                    var t = this._rect,
                      e = this.style,
                      i = !t;
                    if (i) {
                      var n = this.path;
                      n || (n = this.path = new r), this.__dirtyPath && (n.beginPath(), this.buildPath(n, this.shape, !1)), t = n[ke]()
                    }
                    if (this._rect = t, e.hasStroke()) {
                      var a = this._rectWithStroke || (this._rectWithStroke = t.clone());
                      if (this[s] || i) {
                        a.copy(t);
                        var o = e[f],
                          l = e.strokeNoScale ? this.getLineScale() : 1;
                        e.hasFill() || (o = Math.max(o, this.strokeContainThreshold || 4)), l > 1e-10 && (a.width += o / l, a[Le] += o / l, a.x -= o / l / 2, a.y -= o / l / 2)
                      }
                      return a
                    }
                    return t
                  },
                  contain: function (t, e) {
                    var i = this.transformCoordToLocal(t, e),
                      n = this[ke](),
                      r = this.style;
                    if (t = i[0], e = i[1], n.contain(t, e)) {
                      var a = this.path.data;
                      if (r.hasStroke()) {
                        var s = r[f],
                          l = r.strokeNoScale ? this.getLineScale() : 1;
                        if (l > 1e-10 && (r.hasFill() || (s = Math.max(s, this.strokeContainThreshold)), o.containStroke(a, s / l, t, e))) return !0
                      }
                      if (r.hasFill()) return o.contain(a, t, e)
                    }
                    return !1
                  },
                  dirty: function (t) {
                    null == t && (t = !0), t && (this.__dirtyPath = t, this._rect = null), this[s] = !0, this.__zr && this.__zr.refresh(), this.__clipTarget && this.__clipTarget.dirty()
                  },
                  animateShape: function (t) {
                    return this.animate("shape", t)
                  },
                  attrKV: function (t, e) {
                    "shape" === t ? (this.setShape(e), this.__dirtyPath = !0, this._rect = null) : i[ye].attrKV.call(this, t, e)
                  },
                  setShape: function (t, e) {
                    var i = this.shape;
                    if (i) {
                      if (n[ie](t))
                        for (var r in t) t.hasOwnProperty(r) && (i[r] = t[r]);
                      else i[t] = e;
                      this.dirty(!0)
                    }
                    return this
                  },
                  getLineScale: function () {
                    var t = this[u];
                    return t && h(t[0] - 1) > 1e-10 && h(t[3] - 1) > 1e-10 ? Math.sqrt(h(t[0] * t[3] - t[2] * t[1])) : 1
                  }
                }, e[ge] = function (t) {
                  var i = function (i) {
                    e.call(this, i), t.style && this.style.extendFrom(t.style, !1);
                    var n = t.shape;
                    if (n) {
                      this.shape = this.shape || {};
                      var r = this.shape;
                      for (var a in n) !r.hasOwnProperty(a) && n.hasOwnProperty(a) && (r[a] = n[a])
                    }
                    t.init && t.init.call(this, i)
                  };
                  n[g](i, e);
                  for (var r in t) "style" !== r && "shape" !== r && (i[ye][r] = t[r]);
                  return i
                }, n[g](e, i), e
              }), e("zrender/mixin/Transformable", [Ve, "../core/matrix", "../core/vector"], function (t) {
                function e(t) {
                  return t > a || -a > t
                }
                var i = t("../core/matrix"),
                  n = t("../core/vector"),
                  r = i.identity,
                  a = 5e-5,
                  o = function (t) {
                    t = t || {}, t[be] || (this[be] = [0, 0]), null == t[h] && (this[h] = 0), t.scale || (this.scale = [1, 1]), this.origin = this.origin || null
                  },
                  s = o[ye];
                s[u] = null, s.needLocalTransform = function () {
                  return e(this[h]) || e(this[be][0]) || e(this[be][1]) || e(this.scale[0] - 1) || e(this.scale[1] - 1)
                }, s.updateTransform = function () {
                  var t = this[N],
                    e = t && t[u],
                    n = this.needLocalTransform(),
                    a = this[u];
                  return n || e ? (a = a || i[me](), n ? this.getLocalTransform(a) : r(a), e && (n ? i.mul(a, t[u], a) : i.copy(a, t[u])), this[u] = a, this.invTransform = this.invTransform || i[me](), void i.invert(this.invTransform, a)) : void(a && r(a))
                }, s.getLocalTransform = function (t) {
                  return o.getLocalTransform(this, t)
                }, s.setTransform = function (t) {
                  var e = this[u],
                    i = t.dpr || 1;
                  e ? t.setTransform(i * e[0], i * e[1], i * e[2], i * e[3], i * e[4], i * e[5]) : t.setTransform(i, 0, 0, i, 0, 0)
                }, s.restoreTransform = function (t) {
                  var e = t.dpr || 1;
                  t.setTransform(e, 0, 0, e, 0, 0)
                };
                var l = [];
                return s.decomposeTransform = function () {
                  if (this[u]) {
                    var t = this[N],
                      n = this[u];
                    t && t[u] && (i.mul(l, t.invTransform, n), n = l);
                    var r = n[0] * n[0] + n[1] * n[1],
                      a = n[2] * n[2] + n[3] * n[3],
                      o = this[be],
                      s = this.scale;
                    e(r - 1) && (r = Math.sqrt(r)), e(a - 1) && (a = Math.sqrt(a)), n[0] < 0 && (r = -r), n[3] < 0 && (a = -a), o[0] = n[4], o[1] = n[5], s[0] = r, s[1] = a, this[h] = Math.atan2(-n[1] / a, n[0] / r)
                  }
                }, s.getGlobalScale = function () {
                  var t = this[u];
                  if (!t) return [1, 1];
                  var e = Math.sqrt(t[0] * t[0] + t[1] * t[1]),
                    i = Math.sqrt(t[2] * t[2] + t[3] * t[3]);
                  return t[0] < 0 && (e = -e), t[3] < 0 && (i = -i), [e, i]
                }, s.transformCoordToLocal = function (t, e) {
                  var i = [t, e],
                    r = this.invTransform;
                  return r && n[p](i, i, r), i
                }, s.transformCoordToGlobal = function (t, e) {
                  var i = [t, e],
                    r = this[u];
                  return r && n[p](i, i, r), i
                }, o.getLocalTransform = function (t, e) {
                  e = e || [], r(e);
                  var n = t.origin,
                    a = t.scale || [1, 1],
                    o = t[h] || 0,
                    s = t[be] || [0, 0];
                  return n && (e[4] -= n[0], e[5] -= n[1]), i.scale(e, e, a), o && i.rotate(e, e, o), n && (e[4] += n[0], e[5] += n[1]), e[4] += s[0], e[5] += s[1], e
                }, o
              }), e("zrender/core/BoundingRect", [Ve, "./vector", "./matrix"], function (t) {
                function e(t, e, i, n) {
                  0 > i && (t += i, i = -i), 0 > n && (e += n, n = -n), this.x = t, this.y = e, this.width = i, this[Le] = n
                }
                var i = t("./vector"),
                  n = t("./matrix"),
                  r = i[p],
                  a = Math.min,
                  o = Math.max;
                return e[ye] = {
                  constructor: e,
                  union: function (t) {
                    var e = a(t.x, this.x),
                      i = a(t.y, this.y);
                    this.width = o(t.x + t.width, this.x + this.width) - e, this[Le] = o(t.y + t[Le], this.y + this[Le]) - i, this.x = e, this.y = i
                  },
                  applyTransform: function () {
                    var t = [],
                      e = [],
                      i = [],
                      n = [];
                    return function (s) {
                      if (s) {
                        t[0] = i[0] = this.x, t[1] = n[1] = this.y, e[0] = n[0] = this.x + this.width, e[1] = i[1] = this.y + this[Le], r(t, t, s), r(e, e, s), r(i, i, s), r(n, n, s), this.x = a(t[0], e[0], i[0], n[0]), this.y = a(t[1], e[1], i[1], n[1]);
                        var l = o(t[0], e[0], i[0], n[0]),
                          u = o(t[1], e[1], i[1], n[1]);
                        this.width = l - this.x, this[Le] = u - this.y
                      }
                    }
                  }(),
                  calculateTransform: function (t) {
                    var e = this,
                      i = t.width / e.width,
                      r = t[Le] / e[Le],
                      a = n[me]();
                    return n.translate(a, a, [-e.x, -e.y]), n.scale(a, a, [i, r]), n.translate(a, a, [t.x, t.y]), a
                  },
                  intersect: function (t) {
                    if (!t) return !1;
                    t instanceof e || (t = e[me](t));
                    var i = this,
                      n = i.x,
                      r = i.x + i.width,
                      a = i.y,
                      o = i.y + i[Le],
                      s = t.x,
                      l = t.x + t.width,
                      u = t.y,
                      c = t.y + t[Le];
                    return !(s > r || n > l || u > o || a > c)
                  },
                  contain: function (t, e) {
                    var i = this;
                    return t >= i.x && t <= i.x + i.width && e >= i.y && e <= i.y + i[Le]
                  },
                  clone: function () {
                    return new e(this.x, this.y, this.width, this[Le])
                  },
                  copy: function (t) {
                    this.x = t.x, this.y = t.y, this.width = t.width, this[Le] = t[Le]
                  },
                  plain: function () {
                    return {
                      x: this.x,
                      y: this.y,
                      width: this.width,
                      height: this[Le]
                    }
                  }
                }, e[me] = function (t) {
                  return new e(t.x, t.y, t.width, t[Le])
                }, e
              }), e("zrender/container/Group", [Ve, a, "../Element", "../core/BoundingRect"], function (t) {
                var e = t(a),
                  i = t("../Element"),
                  n = t("../core/BoundingRect"),
                  r = function (t) {
                    t = t || {}, i.call(this, t);
                    for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
                    this._children = [], this.__storage = null, this[s] = !0
                  };
                return r[ye] = {
                  constructor: r,
                  isGroup: !0,
                  type: "group",
                  silent: !1,
                  children: function () {
                    return this._children.slice()
                  },
                  childAt: function (t) {
                    return this._children[t]
                  },
                  childOfName: function (t) {
                    for (var e = this._children, i = 0; i < e[ve]; i++)
                      if (e[i].name === t) return e[i]
                  },
                  childCount: function () {
                    return this._children[ve]
                  },
                  add: function (t) {
                    return t && t !== this && t[N] !== this && (this._children.push(t), this._doAdd(t)), this
                  },
                  addBefore: function (t, e) {
                    if (t && t !== this && t[N] !== this && e && e[N] === this) {
                      var i = this._children,
                        n = i[ce](e);
                      n >= 0 && (i[M](n, 0, t), this._doAdd(t))
                    }
                    return this
                  },
                  _doAdd: function (t) {
                    t[N] && t[N][W](t), t[N] = this;
                    var e = this.__storage,
                      i = this.__zr;
                    e && e !== t.__storage && (e.addToStorage(t), t instanceof r && t.addChildrenToStorage(e)), i && i.refresh()
                  },
                  remove: function (t) {
                    var i = this.__zr,
                      n = this.__storage,
                      a = this._children,
                      o = e[ce](a, t);
                    return 0 > o ? this : (a[M](o, 1), t[N] = null, n && (n.delFromStorage(t), t instanceof r && t.delChildrenFromStorage(n)), i && i.refresh(), this)
                  },
                  removeAll: function () {
                    var t, e, i = this._children,
                      n = this.__storage;
                    for (e = 0; e < i[ve]; e++) t = i[e], n && (n.delFromStorage(t), t instanceof r && t.delChildrenFromStorage(n)), t[N] = null;
                    return i[ve] = 0, this
                  },
                  eachChild: function (t, e) {
                    for (var i = this._children, n = 0; n < i[ve]; n++) {
                      var r = i[n];
                      t.call(e, r, n)
                    }
                    return this
                  },
                  traverse: function (t, e) {
                    for (var i = 0; i < this._children[ve]; i++) {
                      var n = this._children[i];
                      t.call(e, n), "group" === n.type && n[b](t, e)
                    }
                    return this
                  },
                  addChildrenToStorage: function (t) {
                    for (var e = 0; e < this._children[ve]; e++) {
                      var i = this._children[e];
                      t.addToStorage(i), i instanceof r && i.addChildrenToStorage(t)
                    }
                  },
                  delChildrenFromStorage: function (t) {
                    for (var e = 0; e < this._children[ve]; e++) {
                      var i = this._children[e];
                      t.delFromStorage(i), i instanceof r && i.delChildrenFromStorage(t)
                    }
                  },
                  dirty: function () {
                    return this[s] = !0, this.__zr && this.__zr.refresh(), this
                  },
                  getBoundingRect: function (t) {
                    for (var e = null, i = new n(0, 0, 0, 0), r = t || this._children, a = [], o = 0; o < r[ve]; o++) {
                      var s = r[o];
                      if (!s[k] && !s.invisible) {
                        var l = s[ke](),
                          u = s.getLocalTransform(a);
                        u ? (i.copy(l), i[p](u), e = e || i.clone(), e.union(i)) : (e = e || l.clone(), e.union(l))
                      }
                    }
                    return e || i
                  }
                }, e[g](r, i), r
              }), e("zrender/graphic/Image", [Ve, "./Displayable", "../core/BoundingRect", a, "../core/LRU"], function (t) {
                function e(t) {
                  i.call(this, t)
                }
                var i = t("./Displayable"),
                  n = t("../core/BoundingRect"),
                  r = t(a),
                  o = t("../core/LRU"),
                  s = new o(50);
                return e[ye] = {
                  constructor: e,
                  type: "image",
                  brush: function (t, e) {
                    var i, n = this.style,
                      r = n.image;
                    if (n.bind(t, this, e), i = typeof r === ue ? this._image : r, !i && r) {
                      var a = s.get(r);
                      if (!a) return i = new Image, i.onload = function () {
                        i.onload = null;
                        for (var t = 0; t < a.pending[ve]; t++) a.pending[t].dirty()
                      }, a = {
                        image: i,
                        pending: [this]
                      }, i.src = r, s.put(r, a), void(this._image = i);
                      if (i = a.image, this._image = i, !i.width || !i[Le]) return void a.pending.push(this)
                    }
                    if (i) {
                      var o = n.x || 0,
                        l = n.y || 0;
                      if (!i.width || !i[Le]) return;
                      var u = n.width,
                        c = n[Le],
                        h = i.width / i[Le];
                      if (null == u && null != c ? u = c * h : null == c && null != u ? c = u / h : null == u && null == c && (u = i.width, c = i[Le]), this.setTransform(t), n.sWidth && n.sHeight) {
                        var d = n.sx || 0,
                          f = n.sy || 0;
                        t.drawImage(i, d, f, n.sWidth, n.sHeight, o, l, u, c)
                      } else if (n.sx && n.sy) {
                        var d = n.sx,
                          f = n.sy,
                          p = u - d,
                          m = c - f;
                        t.drawImage(i, d, f, p, m, o, l, u, c)
                      } else t.drawImage(i, o, l, u, c);
                      this.restoreTransform(t), null != n.text && this.drawRectText(t, this[ke]())
                    }
                  },
                  getBoundingRect: function () {
                    var t = this.style;
                    return this._rect || (this._rect = new n(t.x || 0, t.y || 0, t.width || 0, t[Le] || 0)), this._rect
                  }
                }, r[g](e, i), e
              }), e("zrender/graphic/shape/Circle", [Ve, "../Path"], function (t) {
                return t("../Path")[ge]({
                  type: "circle",
                  shape: {
                    cx: 0,
                    cy: 0,
                    r: 0
                  },
                  buildPath: function (t, e, i) {
                    i && t[l](e.cx + e.r, e.cy), t.arc(e.cx, e.cy, e.r, 0, 2 * Math.PI, !0)
                  }
                })
              }), e("zrender/graphic/Text", [Ve, "./Displayable", a, "../contain/text"], function (t) {
                var e = t("./Displayable"),
                  i = t(a),
                  n = t("../contain/text"),
                  r = function (t) {
                    e.call(this, t)
                  };
                return r[ye] = {
                  constructor: r,
                  type: "text",
                  brush: function (t, e) {
                    var i = this.style,
                      r = i.x || 0,
                      a = i.y || 0,
                      o = i.text;
                    if (null != o && (o += ""), i.bind(t, this, e), o) {
                      this.setTransform(t);
                      var s, l = i[ze],
                        u = i.textFont || i.font;
                      if (i.textVerticalAlign) {
                        var c = n[ke](o, u, i[ze], "top");
                        switch (s = Te, i.textVerticalAlign) {
                          case Te:
                            a -= c[Le] / 2 - c.lineHeight / 2;
                            break;
                          case we:
                            a -= c[Le] - c.lineHeight / 2;
                            break;
                          default:
                            a += c.lineHeight / 2
                        }
                      } else s = i.textBaseline;
                      t.font = u || "12px sans-serif", t[ze] = l || "left", t[ze] !== l && (t[ze] = "left"), t.textBaseline = s || "alphabetic", t.textBaseline !== s && (t.textBaseline = "alphabetic");
                      for (var h = n.measureText("国", t.font).width, d = o.split("\n"), f = 0; f < d[ve]; f++) i.hasStroke() && t.strokeText(d[f], r, a), i.hasFill() && t.fillText(d[f], r, a), a += h;
                      this.restoreTransform(t)
                    }
                  },
                  getBoundingRect: function () {
                    var t = this.style;
                    if (!this._rect) {
                      var e = t.textVerticalAlign,
                        i = n[ke](t.text + "", t.textFont || t.font, t[ze], e ? "top" : t.textBaseline);
                      switch (e) {
                        case Te:
                          i.y -= i[Le] / 2;
                          break;
                        case we:
                          i.y -= i[Le]
                      }
                      if (i.x += t.x || 0, i.y += t.y || 0, t.hasStroke()) {
                        var r = t[f];
                        i.x -= r / 2, i.y -= r / 2, i.width += r, i[Le] += r
                      }
                      this._rect = i
                    }
                    return this._rect
                  }
                }, i[g](r, e), r
              }), e("zrender/graphic/shape/Ring", [Ve, "../Path"], function (t) {
                return t("../Path")[ge]({
                  type: "ring",
                  shape: {
                    cx: 0,
                    cy: 0,
                    r: 0,
                    r0: 0
                  },
                  buildPath: function (t, e) {
                    var i = e.cx,
                      n = e.cy,
                      r = 2 * Math.PI;
                    t[l](i + e.r, n), t.arc(i, n, e.r, 0, r, !1), t[l](i + e.r0, n), t.arc(i, n, e.r0, 0, r, !0)
                  }
                })
              }), e("zrender/graphic/shape/Sector", [Ve, "../../core/env", "../Path"], function (t) {
                var e = t("../../core/env"),
                  a = t("../Path"),
                  o = [
                    [r, 0],
                    ["shadowColor", "#000"],
                    [n, 0],
                    [i, 0]
                  ];
                return a[ge]({
                  type: "sector",
                  shape: {
                    cx: 0,
                    cy: 0,
                    r0: 0,
                    r: 0,
                    startAngle: 0,
                    endAngle: 2 * Math.PI,
                    clockwise: !0
                  },
                  brush: e.browser.ie && e.browser.version >= 11 ? function () {
                    var t, e = this.__clipPaths,
                      i = this.style;
                    if (e)
                      for (var n = 0; n < e[ve]; n++) {
                        var r = e[n] && e[n].shape;
                        if (r && r.startAngle === r.endAngle) {
                          for (var s = 0; s < o[ve]; s++) o[s][2] = i[o[s][0]], i[o[s][0]] = o[s][1];
                          t = !0;
                          break
                        }
                      }
                    if (a[ye].brush.apply(this, arguments), t)
                      for (var s = 0; s < o[ve]; s++) i[o[s][0]] = o[s][2]
                  } : a[ye].brush,
                  buildPath: function (t, e) {
                    var i = e.cx,
                      n = e.cy,
                      r = Math.max(e.r0 || 0, 0),
                      a = Math.max(e.r, 0),
                      o = e.startAngle,
                      s = e.endAngle,
                      u = e.clockwise,
                      c = Math.cos(o),
                      h = Math.sin(o);
                    t[l](c * r + i, h * r + n), t.lineTo(c * a + i, h * a + n), t.arc(i, n, a, o, s, !u), t.lineTo(Math.cos(s) * r + i, Math.sin(s) * r + n), 0 !== r && t.arc(i, n, r, s, o, u), t.closePath()
                  }
                })
              }), e("zrender/graphic/shape/Polygon", [Ve, "../helper/poly", "../Path"], function (t) {
                var e = t("../helper/poly");
                return t("../Path")[ge]({
                  type: "polygon",
                  shape: {
                    points: null,
                    smooth: !1,
                    smoothConstraint: null
                  },
                  buildPath: function (t, i) {
                    e.buildPath(t, i, !0)
                  }
                })
              }), e("zrender/graphic/shape/Polyline", [Ve, "../helper/poly", "../Path"], function (t) {
                var e = t("../helper/poly");
                return t("../Path")[ge]({
                  type: "polyline",
                  shape: {
                    points: null,
                    smooth: !1,
                    smoothConstraint: null
                  },
                  style: {
                    stroke: "#000",
                    fill: null
                  },
                  buildPath: function (t, i) {
                    e.buildPath(t, i, !1)
                  }
                })
              }), e("zrender/graphic/shape/Rect", [Ve, "../helper/roundRect", "../Path"], function (t) {
                var e = t("../helper/roundRect");
                return t("../Path")[ge]({
                  type: "rect",
                  shape: {
                    r: 0,
                    x: 0,
                    y: 0,
                    width: 0,
                    height: 0
                  },
                  buildPath: function (t, i) {
                    var n = i.x,
                      r = i.y,
                      a = i.width,
                      o = i[Le];
                    i.r ? e.buildPath(t, i) : t.rect(n, r, a, o), t.closePath()
                  }
                })
              }), e("zrender/graphic/shape/Line", [Ve, "../Path"], function (t) {
                return t("../Path")[ge]({
                  type: "line",
                  shape: {
                    x1: 0,
                    y1: 0,
                    x2: 0,
                    y2: 0,
                    percent: 1
                  },
                  style: {
                    stroke: "#000",
                    fill: null
                  },
                  buildPath: function (t, e) {
                    var i = e.x1,
                      n = e.y1,
                      r = e.x2,
                      a = e.y2,
                      o = e.percent;
                    0 !== o && (t[l](i, n), 1 > o && (r = i * (1 - o) + r * o, a = n * (1 - o) + a * o), t.lineTo(r, a))
                  },
                  pointAt: function (t) {
                    var e = this.shape;
                    return [e.x1 * (1 - t) + e.x2 * t, e.y1 * (1 - t) + e.y2 * t]
                  }
                })
              }), e("zrender/graphic/shape/Arc", [Ve, "../Path"], function (t) {
                return t("../Path")[ge]({
                  type: "arc",
                  shape: {
                    cx: 0,
                    cy: 0,
                    r: 0,
                    startAngle: 0,
                    endAngle: 2 * Math.PI,
                    clockwise: !0
                  },
                  style: {
                    stroke: "#000",
                    fill: null
                  },
                  buildPath: function (t, e) {
                    var i = e.cx,
                      n = e.cy,
                      r = Math.max(e.r, 0),
                      a = e.startAngle,
                      o = e.endAngle,
                      s = e.clockwise,
                      u = Math.cos(a),
                      c = Math.sin(a);
                    t[l](u * r + i, c * r + n), t.arc(i, n, r, a, o, !s)
                  }
                })
              }), e("zrender/graphic/shape/BezierCurve", [Ve, "../../core/curve", "../../core/vector", "../Path"], function (t) {
                function e(t, e, i) {
                  var n = t.cpx2,
                    r = t.cpy2;
                  return null === n || null === r ? [(i ? c : s)(t.x1, t.cpx1, t.cpx2, t.x2, e), (i ? c : s)(t.y1, t.cpy1, t.cpy2, t.y2, e)] : [(i ? u : o)(t.x1, t.cpx1, t.x2, e), (i ? u : o)(t.y1, t.cpy1, t.y2, e)]
                }
                var i = t("../../core/curve"),
                  n = t("../../core/vector"),
                  r = i.quadraticSubdivide,
                  a = i.cubicSubdivide,
                  o = i.quadraticAt,
                  s = i.cubicAt,
                  u = i.quadraticDerivativeAt,
                  c = i.cubicDerivativeAt,
                  h = [];
                return t("../Path")[ge]({
                  type: "bezier-curve",
                  shape: {
                    x1: 0,
                    y1: 0,
                    x2: 0,
                    y2: 0,
                    cpx1: 0,
                    cpy1: 0,
                    percent: 1
                  },
                  style: {
                    stroke: "#000",
                    fill: null
                  },
                  buildPath: function (t, e) {
                    var i = e.x1,
                      n = e.y1,
                      o = e.x2,
                      s = e.y2,
                      u = e.cpx1,
                      c = e.cpy1,
                      d = e.cpx2,
                      f = e.cpy2,
                      p = e.percent;
                    0 !== p && (t[l](i, n), null == d || null == f ? (1 > p && (r(i, u, o, p, h), u = h[1], o = h[2], r(n, c, s, p, h), c = h[1], s = h[2]), t.quadraticCurveTo(u, c, o, s)) : (1 > p && (a(i, u, d, o, p, h), u = h[1], d = h[2], o = h[3], a(n, c, f, s, p, h), c = h[1], f = h[2], s = h[3]), t.bezierCurveTo(u, c, d, f, o, s)))
                  },
                  pointAt: function (t) {
                    return e(this.shape, t, !1)
                  },
                  tangentAt: function (t) {
                    var i = e(this.shape, t, !0);
                    return n.normalize(i, i)
                  }
                })
              }), e("zrender/graphic/CompoundPath", [Ve, "./Path"], function (t) {
                var e = t("./Path");
                return e[ge]({
                  type: "compound",
                  shape: {
                    paths: null
                  },
                  _updatePathDirty: function () {
                    for (var t = this.__dirtyPath, e = this.shape.paths, i = 0; i < e[ve]; i++) t = t || e[i].__dirtyPath;
                    this.__dirtyPath = t, this[s] = this[s] || t
                  },
                  beforeBrush: function () {
                    this._updatePathDirty();
                    for (var t = this.shape.paths || [], e = this.getGlobalScale(), i = 0; i < t[ve]; i++) t[i].path || t[i].createPathProxy(), t[i].path.setScale(e[0], e[1])
                  },
                  buildPath: function (t, e) {
                    for (var i = e.paths || [], n = 0; n < i[ve]; n++) i[n].buildPath(t, i[n].shape, !0)
                  },
                  afterBrush: function () {
                    for (var t = this.shape.paths, e = 0; e < t[ve]; e++) t[e].__dirtyPath = !1
                  },
                  getBoundingRect: function () {
                    return this._updatePathDirty(), e[ye][ke].call(this)
                  }
                })
              }), e("zrender/graphic/LinearGradient", [Ve, a, "./Gradient"], function (t) {
                var e = t(a),
                  i = t("./Gradient"),
                  n = function (t, e, n, r, a, o) {
                    this.x = null == t ? 0 : t, this.y = null == e ? 0 : e, this.x2 = null == n ? 1 : n, this.y2 = null == r ? 0 : r, this.type = "linear", this.global = o || !1, i.call(this, a)
                  };
                return n[ye] = {
                  constructor: n
                }, e[g](n, i), n
              }), e("zrender/graphic/RadialGradient", [Ve, a, "./Gradient"], function (t) {
                var e = t(a),
                  i = t("./Gradient"),
                  n = function (t, e, n, r, a) {
                    this.x = null == t ? .5 : t, this.y = null == e ? .5 : e, this.r = null == n ? .5 : n, this.type = "radial", this.global = a || !1, i.call(this, r)
                  };
                return n[ye] = {
                  constructor: n
                }, e[g](n, i), n
              }), e("echarts/component/axisPointer/modelHelper", [Ve, Fe, "../../model/Model"], function (t) {
                function e(t, e, n) {
                  var a = e.getComponent("tooltip"),
                    s = e.getComponent("axisPointer"),
                    l = s.get("link", !0) || [],
                    c = [];
                  u(n.getCoordinateSystems(), function (n) {
                    function d(a, u, h) {
                      var d = h.model[Oe]("axisPointer", s),
                        p = d.get("show");
                      if (p && ("auto" !== p || a || o(d))) {
                        null == u && (u = d.get("triggerTooltip")), d = a ? i(h, g, s, e, a, u) : d;
                        var v = d.get("snap"),
                          y = f(h.model),
                          x = u || v || h.type === re,
                          _ = t.axesInfo[y] = {
                            key: y,
                            axis: h,
                            coordSys: n,
                            axisPointerModel: d,
                            triggerTooltip: u,
                            involveSeries: x,
                            snap: v,
                            useHandle: o(d),
                            seriesModels: []
                          };
                        m[y] = _, t.seriesInvolved |= x;
                        var b = r(l, h);
                        if (null != b) {
                          var w = c[b] || (c[b] = {
                            axesInfo: {}
                          });
                          w.axesInfo[y] = _, w.mapper = l[b].mapper, _.linkGroup = w
                        }
                      }
                    }
                    if (n.axisPointerEnabled) {
                      var p = f(n.model),
                        m = t.coordSysAxesInfo[p] = {};
                      t.coordSysMap[p] = n;
                      var v = n.model,
                        g = v[Oe]("tooltip", a);
                      if (u(n.getAxes(), h(d, !1, null)), n.getTooltipAxes && a && g.get("show")) {
                        var y = "axis" === g.get(S),
                          x = "cross" === g.get("axisPointer.type"),
                          _ = n.getTooltipAxes(g.get("axisPointer.axis"));
                        (y || x) && u(_.baseAxes, h(d, x ? "cross" : !0, y)), x && u(_.otherAxes, h(d, "cross", !1))
                      }
                    }
                  })
                }

                function i(t, e, i, n, r, a) {
                  var o = e[Oe]("axisPointer"),
                    c = {};
                  u(["type", "snap", "lineStyle", "shadowStyle", "label", H, "animationDurationUpdate", "animationEasingUpdate", "z"], function (t) {
                    c[t] = s.clone(o.get(t))
                  }), c.snap = t.type !== re && !!a, "cross" === o.get("type") && (c.type = "line");
                  var h = c.label || (c.label = {});
                  if (null == h.show && (h.show = !1), "cross" === r && (h.show = !0, !a)) {
                    var d = c.lineStyle = o.get("crossStyle");
                    d && s[Ee](h[De] || (h[De] = {}), d[De])
                  }
                  return t.model[Oe]("axisPointer", new l(c, i, n))
                }

                function n(t, e) {
                  e[K](function (e) {
                    var i = e[Re],
                      n = e.get("tooltip.trigger", !0),
                      r = e.get("tooltip.show", !0);
                    i && "none" !== n && n !== !1 && "item" !== n && r !== !1 && e.get("axisPointer.show", !0) !== !1 && u(t.coordSysAxesInfo[f(i.model)], function (t) {
                      var n = t.axis;
                      i[ne](n.dim) === n && (t.seriesModels.push(e), null == t.seriesDataCount && (t.seriesDataCount = 0), t.seriesDataCount += e[Ne]().count())
                    })
                  }, this)
                }

                function r(t, e) {
                  for (var i = e.model, n = e.dim, r = 0; r < t[ve]; r++) {
                    var o = t[r] || {};
                    if (a(o[n + "AxisId"], i.id) || a(o[n + "AxisIndex"], i[Q]) || a(o[n + "AxisName"], i.name)) return r
                  }
                }

                function a(t, e) {
                  return "all" === t || s[y](t) && s[ce](t, e) >= 0 || t === e
                }

                function o(t) {
                  return !!t.get("handle.show")
                }
                var s = t(Fe),
                  l = t("../../model/Model"),
                  u = s.each,
                  h = s.curry,
                  d = {};
                d.collect = function (t, i) {
                  var r = {
                    axesInfo: {},
                    seriesInvolved: !1,
                    coordSysAxesInfo: {},
                    coordSysMap: {}
                  };
                  return e(r, t, i), r.seriesInvolved && n(r, t), r
                }, d.fixValue = function (t) {
                  var e = d.getAxisInfo(t);
                  if (e) {
                    var i = e.axisPointerModel,
                      n = e.axis.scale,
                      r = i[c],
                      a = i.get("status"),
                      s = i.get("value");
                    null != s && (s = n.parse(s));
                    var l = o(i);
                    null == a && (r.status = l ? "show" : "hide");
                    var u = n[fe]().slice();
                    u[0] > u[1] && u.reverse(), (null == s || s > u[1]) && (s = u[1]), s < u[0] && (s = u[0]), r.value = s, l && (r.status = e.axis.scale.isBlank() ? "hide" : "show")
                  }
                }, d.getAxisInfo = function (t) {
                  var e = (t[pe].getComponent("axisPointer") || {}).coordSysAxesInfo;
                  return e && e.axesInfo[f(t)]
                }, d.getAxisPointerModel = function (t) {
                  var e = d.getAxisInfo(t);
                  return e && e.axisPointerModel
                };
                var f = d.makeKey = function (t) {
                  return t.type + "||" + t.id
                };
                return d
              }), e("echarts/component/axisPointer/axisTrigger", [Ve, Fe, "../../util/model", "./modelHelper", "./findPointFromSeries"], function (t) {
                function e(t, e, n) {
                  var c = t.currTrigger,
                    p = [t.x, t.y],
                    m = t,
                    x = t[P] || f.bind(n[P], n),
                    _ = e.getComponent("axisPointer").coordSysAxesInfo;
                  d(p) && (p = v({
                    seriesIndex: m[E],
                    dataIndex: m[F]
                  }, e).point);
                  var b = d(p),
                    w = m.axesInfo,
                    M = _.axesInfo,
                    T = "leave" === c || d(p),
                    S = {},
                    C = {},
                    A = {
                      list: [],
                      map: {}
                    },
                    L = {
                      showPointer: y(r, C),
                      showTooltip: y(a, A)
                    };
                  g(_.coordSysMap, function (t, e) {
                    var n = b || t.containPoint(p);
                    g(_.coordSysAxesInfo[e], function (t) {
                      var e = t.axis,
                        r = u(w, t);
                      if (!T && n && (!w || r)) {
                        var a = r && r.value;
                        null != a || b || (a = e.pointToData(p)), null != a && i(t, a, L, !1, S)
                      }
                    })
                  });
                  var k = {};
                  return g(M, function (t, e) {
                    var i = t.linkGroup;
                    i && !C[e] && g(i.axesInfo, function (e, n) {
                      var r = C[n];
                      if (e !== t && r) {
                        var a = r.value;
                        i.mapper && (a = t.axis.scale.parse(i.mapper(a, h(e), h(t)))), k[t.key] = a
                      }
                    })
                  }), g(k, function (t, e) {
                    i(M[e], t, L, !0, S)
                  }), o(C, M, S), s(A, p, t, x), l(M, x, n), S
                }

                function i(t, e, i, r, a) {
                  var o = t.axis;
                  if (!o.scale.isBlank() && o.containData(e)) {
                    if (!t.involveSeries) return void i.showPointer(t, e);
                    var s = n(e, t),
                      l = s.payloadBatch,
                      u = s.snapToValue;
                    l[0] && null == a[E] && f[ge](a, l[0]), !r && t.snap && o.containData(u) && null != u && (e = u), i.showPointer(t, e, l, a), i.showTooltip(t, s, u)
                  }
                }

                function n(t, e) {
                  var i = e.axis,
                    n = i.dim,
                    r = t,
                    a = [],
                    o = Number.MAX_VALUE,
                    s = -1;
                  return g(e.seriesModels, function (e) {
                    var l, u, c = e[$](n);
                    if (e.getAxisTooltipData) {
                      var h = e.getAxisTooltipData(c, t, i);
                      u = h.dataIndices, l = h.nestestValue
                    } else {
                      if (u = e[Ne]().indicesOfNearest(c[0], t, !1, i.type === re ? .5 : null), !u[ve]) return;
                      l = e[Ne]().get(c[0], u[0])
                    }
                    if (null != l && isFinite(l)) {
                      var d = t - l,
                        f = Math.abs(d);
                      o >= f && ((o > f || d >= 0 && 0 > s) && (o = f, s = d, r = l, a[ve] = 0), g(u, function (t) {
                        a.push({
                          seriesIndex: e[E],
                          dataIndexInside: t,
                          dataIndex: e[Ne]().getRawIndex(t)
                        })
                      }))
                    }
                  }), {
                    payloadBatch: a,
                    snapToValue: r
                  }
                }

                function r(t, e, i, n) {
                  t[e.key] = {
                    value: i,
                    payloadBatch: n
                  }
                }

                function a(t, e, i, n) {
                  var r = i.payloadBatch,
                    a = e.axis,
                    o = a.model,
                    s = e.axisPointerModel;
                  if (e.triggerTooltip && r[ve]) {
                    var l = e.coordSys.model,
                      u = m.makeKey(l),
                      c = t.map[u];
                    c || (c = t.map[u] = {
                      coordSysId: l.id,
                      coordSysIndex: l[Q],
                      coordSysType: l.type,
                      coordSysMainType: l.mainType,
                      dataByAxis: []
                    }, t.list.push(c)), c.dataByAxis.push({
                      axisDim: a.dim,
                      axisIndex: o[Q],
                      axisType: o.type,
                      axisId: o.id,
                      value: n,
                      valueLabelOpt: {
                        precision: s.get("label.precision"),
                        formatter: s.get("label.formatter")
                      },
                      seriesDataIndices: r.slice()
                    })
                  }
                }

                function o(t, e, i) {
                  var n = i.axesInfo = [];
                  g(e, function (e, i) {
                    var r = e.axisPointerModel[c],
                      a = t[i];
                    a ? (!e.useHandle && (r.status = "show"), r.value = a.value, r.seriesDataIndices = (a.payloadBatch || []).slice()) : !e.useHandle && (r.status = "hide"), "show" === r.status && n.push({
                      axisDim: e.axis.dim,
                      axisIndex: e.axis.model[Q],
                      value: r.value
                    })
                  })
                }

                function s(t, e, i, n) {
                  if (d(e) || !t.list[ve]) return void n({
                    type: "hideTip"
                  });
                  var r = ((t.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};
                  n({
                    type: "showTip",
                    escapeConnect: !0,
                    x: e[0],
                    y: e[1],
                    tooltipOption: i.tooltipOption,
                    position: i[be],
                    dataIndexInside: r.dataIndexInside,
                    dataIndex: r[F],
                    seriesIndex: r[E],
                    dataByCoordSys: t.list
                  })
                }

                function l(t, e, i) {
                  var n = i.getZr(),
                    r = "axisPointerLastHighlights",
                    a = x(n)[r] || {},
                    o = x(n)[r] = {};
                  g(t, function (t) {
                    var e = t.axisPointerModel[c];
                    "show" === e.status && g(e.seriesDataIndices, function (t) {
                      var e = t[E] + " | " + t[F];
                      o[e] = t
                    })
                  });
                  var s = [],
                    l = [];
                  f.each(a, function (t, e) {
                    !o[e] && l.push(t)
                  }), f.each(o, function (t, e) {
                    !a[e] && s.push(t)
                  }), l[ve] && i[P]({
                    type: "downplay",
                    escapeConnect: !0,
                    batch: l
                  }), s[ve] && i[P]({
                    type: "highlight",
                    escapeConnect: !0,
                    batch: s
                  })
                }

                function u(t, e) {
                  for (var i = 0; i < (t || [])[ve]; i++) {
                    var n = t[i];
                    if (e.axis.dim === n.axisDim && e.axis.model[Q] === n.axisIndex) return n
                  }
                }

                function h(t) {
                  var e = t.axis.model,
                    i = {},
                    n = i.axisDim = t.axis.dim;
                  return i.axisIndex = i[n + "AxisIndex"] = e[Q], i.axisName = i[n + "AxisName"] = e.name, i.axisId = i[n + "AxisId"] = e.id, i
                }

                function d(t) {
                  return !t || null == t[0] || isNaN(t[0]) || null == t[1] || isNaN(t[1])
                }
                var f = t(Fe),
                  p = t("../../util/model"),
                  m = t("./modelHelper"),
                  v = t("./findPointFromSeries"),
                  g = f.each,
                  y = f.curry,
                  x = p.makeGetter();
                return e
              }), e("echarts/component/axisPointer/AxisPointerModel", [Ve, "../../echarts"], function (t) {
                var e = t("../../echarts"),
                  i = e.extendComponentModel({
                    type: "axisPointer",
                    coordSysAxesInfo: null,
                    defaultOption: {
                      show: "auto",
                      triggerOn: null,
                      zlevel: 0,
                      z: 50,
                      type: "line",
                      snap: !1,
                      triggerTooltip: !0,
                      value: null,
                      status: null,
                      link: [],
                      animation: null,
                      animationDurationUpdate: 200,
                      lineStyle: {
                        color: "#aaa",
                        width: 1,
                        type: "solid"
                      },
                      shadowStyle: {
                        color: "rgba(150,150,150,0.3)"
                      },
                      label: {
                        show: !0,
                        formatter: null,
                        precision: "auto",
                        margin: 3,
                        textStyle: {
                          color: "#fff"
                        },
                        padding: [5, 7, 5, 7],
                        backgroundColor: "auto",
                        borderColor: null,
                        borderWidth: 0,
                        shadowBlur: 3,
                        shadowColor: "#aaa"
                      },
                      handle: {
                        show: !1,
                        icon: "M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",
                        size: 45,
                        margin: 50,
                        color: "#333",
                        shadowBlur: 3,
                        shadowColor: "#aaa",
                        shadowOffsetX: 0,
                        shadowOffsetY: 2,
                        throttle: 40
                      }
                    }
                  });
                return i
              }), e("echarts/component/axisPointer/AxisPointerView", [Ve, "./globalListener", "../../echarts"], function (t) {
                var e = t("./globalListener"),
                  i = t("../../echarts").extendComponentView({
                    type: "axisPointer",
                    render: function (t, i, n) {
                      var r = i.getComponent("tooltip"),
                        a = t.get("triggerOn") || r && r.get("triggerOn") || "mousemove|click";
                      e[j]("axisPointer", n, function (t, e, i) {
                        "none" !== a && ("leave" === t || a[ce](t) >= 0) && i({
                          type: "updateAxisPointer",
                          currTrigger: t,
                          x: e && e.offsetX,
                          y: e && e.offsetY
                        })
                      })
                    },
                    remove: function (t, n) {
                      e.disopse(n.getZr(), "axisPointer"), i.superApply(this._model, W, arguments)
                    },
                    dispose: function (t, n) {
                      e.unregister("axisPointer", n), i.superApply(this._model, T, arguments)
                    }
                  })
              }), e("echarts/component/axisPointer/CartesianAxisPointer", [Ve, Z, "./BaseAxisPointer", "./viewHelper", "../axis/cartesianAxisHelper", "../axis/AxisView"], function (t) {
                function e(t, e) {
                  var i = {};
                  return i[e.dim + "AxisIndex"] = e.index, t.getCartesian(i)
                }

                function i(t) {
                  return "x" === t.dim ? 0 : 1
                }
                var n = t(Z),
                  r = t("./BaseAxisPointer"),
                  a = t("./viewHelper"),
                  o = t("../axis/cartesianAxisHelper"),
                  s = t("../axis/AxisView"),
                  l = r[ge]({
                    makeElOption: function (t, i, n, r, s) {
                      var l = n.axis,
                        c = l.grid,
                        h = r.get("type"),
                        d = e(c, l).getOtherAxis(l).getGlobalExtent(),
                        f = l[te](l[J](i, !0));
                      if (h && "none" !== h) {
                        var p = a.buildElStyle(r),
                          m = u[h](l, f, d, p);
                        m.style = p, t.graphicKey = m.type, t.pointer = m
                      }
                      var v = o.layout(c.model, n);
                      a.buildCartesianSingleLabelElOption(i, t, v, n, r, s)
                    },
                    getHandleTransform: function (t, e, i) {
                      var n = o.layout(e.axis.grid.model, e, {
                        labelInside: !1
                      });
                      return n.labelMargin = i.get("handle.margin"), {
                        position: a.getTransformedPosition(e.axis, t, n),
                        rotation: n[h] + (n.labelDirection < 0 ? Math.PI : 0)
                      }
                    },
                    updateHandleTransform: function (t, i, n) {
                      var r = n.axis,
                        a = r.grid,
                        o = r.getGlobalExtent(!0),
                        s = e(a, r).getOtherAxis(r).getGlobalExtent(),
                        l = "x" === r.dim ? 0 : 1,
                        u = t[be];
                      u[l] += i[l], u[l] = Math.min(o[1], u[l]), u[l] = Math.max(o[0], u[l]);
                      var c = (s[1] + s[0]) / 2,
                        d = [c, c];
                      d[l] = u[l];
                      var f = [{
                        verticalAlign: "middle"
                      }, {
                        align: "center"
                      }];
                      return {
                        position: u,
                        rotation: t[h],
                        cursorPoint: d,
                        tooltipOption: f[l]
                      }
                    }
                  }),
                  u = {
                    line: function (t, e, r, o) {
                      var s = a.makeLineShape([e, r[0]], [e, r[1]], i(t));
                      return n.subPixelOptimizeLine({
                        shape: s,
                        style: o
                      }), {
                        type: "Line",
                        shape: s
                      }
                    },
                    shadow: function (t, e, n) {
                      var r = t.getBandWidth(),
                        o = n[1] - n[0];
                      return {
                        type: "Rect",
                        shape: a.makeRectShape([e - r / 2, n[0]], [r, o], i(t))
                      }
                    }
                  };
                return s.registerAxisPointerClass("CartesianAxisPointer", l), l
              }), e("echarts/component/marker/MarkerModel", [Ve, "../../util/model", Fe, D, "../../util/format", "../../echarts"], function (t) {
                function e(t) {
                  i.defaultEmphasis(t.label, i.LABEL_OPTIONS)
                }
                var i = t("../../util/model"),
                  n = t(Fe),
                  r = t(D),
                  a = t("../../util/format"),
                  o = a.addCommas,
                  s = a.encodeHTML,
                  l = t("../../echarts").extendComponentModel({
                    type: "marker",
                    dependencies: [C, "grid", "polar", "geo"],
                    init: function (t, e, i, n) {
                      this.mergeDefaultAndTheme(t, i), this.mergeOption(t, i, n.createdBySelf, !0)
                    },
                    isAnimationEnabled: function () {
                      if (r.node) return !1;
                      var t = this.__hostSeries;
                      return this[R](H) && t && t.isAnimationEnabled()
                    },
                    mergeOption: function (t, i, r, a) {
                      var o = this.constructor,
                        s = this.mainType + "Model";
                      r || i[K](function (t) {
                        var r = t.get(this.mainType),
                          l = t[s];
                        return r && r.data ? (l ? l.mergeOption(r, i, !0) : (a && e(r), n.each(r.data, function (t) {
                          t instanceof Array ? (e(t[0]), e(t[1])) : e(t)
                        }), l = new o(r, this, i), n[ge](l, {
                          mainType: this.mainType,
                          seriesIndex: t[E],
                          name: t.name,
                          createdBySelf: !0
                        }), l.__hostSeries = t), void(t[s] = l)) : void(t[s] = null)
                      }, this)
                    },
                    formatTooltip: function (t) {
                      var e = this[Ne](),
                        i = this.getRawValue(t),
                        r = n[y](i) ? n.map(i, o).join(", ") : o(i),
                        a = e.getName(t),
                        l = s(this.name);
                      return (null != i || a) && (l += "<br />"), a && (l += s(a), null != i && (l += " : ")), null != i && (l += s(r)), l
                    },
                    getData: function () {
                      return this._data
                    },
                    setData: function (t) {
                      this._data = t
                    }
                  });
                return n.mixin(l, i.dataFormatMixin), l
              }), e("zrender/contain/text", [Ve, a, "../core/BoundingRect"], function (t) {
                function e(t, e) {
                  var i = t + ":" + e;
                  if (s[i]) return s[i];
                  for (var n = (t + "").split("\n"), r = 0, a = 0, o = n[ve]; o > a; a++) r = Math.max(f.measureText(n[a], e).width, r);
                  return l > u && (l = 0, s = {}), l++, s[i] = r, r
                }

                function i(t, i, n, r) {
                  var a = ((t || "") + "").split("\n")[ve],
                    o = e(t, i),
                    s = e("国", i),
                    l = a * s,
                    u = new h(0, 0, o, l);
                  switch (u.lineHeight = s, r) {
                    case we:
                    case "alphabetic":
                      u.y -= s;
                      break;
                    case Te:
                      u.y -= s / 2
                  }
                  switch (n) {
                    case "end":
                    case "right":
                      u.x -= u.width;
                      break;
                    case Me:
                      u.x -= u.width / 2
                  }
                  return u
                }

                function n(t, e, i, n) {
                  var r = e.x,
                    a = e.y,
                    o = e[Le],
                    s = e.width,
                    l = i[Le],
                    u = i.lineHeight,
                    c = o / 2 - l / 2 + u,
                    h = "left";
                  switch (t) {
                    case "left":
                      r -= n, a += c, h = "right";
                      break;
                    case "right":
                      r += n + s, a += c, h = "left";
                      break;
                    case "top":
                      r += s / 2, a -= n + l - u, h = Me;
                      break;
                    case we:
                      r += s / 2, a += o + n + u, h = Me;
                      break;
                    case "inside":
                      r += s / 2, a += c, h = Me;
                      break;
                    case "insideLeft":
                      r += n, a += c, h = "left";
                      break;
                    case "insideRight":
                      r += s - n, a += c, h = "right";
                      break;
                    case "insideTop":
                      r += s / 2, a += n + u, h = Me;
                      break;
                    case "insideBottom":
                      r += s / 2, a += o - l - n + u, h = Me;
                      break;
                    case "insideTopLeft":
                      r += n, a += n + u, h = "left";
                      break;
                    case "insideTopRight":
                      r += s - n, a += n + u, h = "right";
                      break;
                    case "insideBottomLeft":
                      r += n, a += o - l - n + u;
                      break;
                    case "insideBottomRight":
                      r += s - n, a += o - l - n + u, h = "right"
                  }
                  return {
                    x: r,
                    y: a,
                    textAlign: h,
                    textBaseline: "alphabetic"
                  }
                }

                function r(t, i, n, r, a) {
                  if (!i) return "";
                  a = a || {}, r = d(r, "...");
                  for (var s = d(a.maxIterations, 2), l = d(a.minChar, 0), u = e("国", n), c = e("a", n), h = d(a.placeholder, ""), f = i = Math.max(0, i - 1), p = 0; l > p && f >= c; p++) f -= c;
                  var m = e(r);
                  m > f && (r = "", m = 0), f = i - m;
                  for (var v = (t + "").split("\n"), p = 0, g = v[ve]; g > p; p++) {
                    var y = v[p],
                      x = e(y, n);
                    if (!(i >= x)) {
                      for (var _ = 0;; _++) {
                        if (f >= x || _ >= s) {
                          y += r;
                          break
                        }
                        var b = 0 === _ ? o(y, f, c, u) : x > 0 ? Math.floor(y[ve] * f / x) : 0;
                        y = y.substr(0, b), x = e(y, n)
                      }
                      "" === y && (y = h), v[p] = y
                    }
                  }
                  return v.join("\n")
                }

                function o(t, e, i, n) {
                  for (var r = 0, a = 0, o = t[ve]; o > a && e > r; a++) {
                    var s = t.charCodeAt(a);
                    r += s >= 0 && 127 >= s ? i : n
                  }
                  return a
                }
                var s = {},
                  l = 0,
                  u = 5e3,
                  c = t(a),
                  h = t("../core/BoundingRect"),
                  d = c[Y],
                  f = {
                    getWidth: e,
                    getBoundingRect: i,
                    adjustTextPositionOnRect: n,
                    truncateText: r,
                    measureText: function (t, e) {
                      var i = c.getContext();
                      return i.font = e || "12px sans-serif", i.measureText(t)
                    }
                  };
                return f
              }), e("echarts/util/clazz", [Ve, Fe], function (t) {
                function e(t) {
                  r.assert(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(t), 'componentType "' + t + '" illegal')
                }

                function i(t, e) {
                  var i = r.slice(arguments, 2);
                  return this.superClass[ye][e].apply(t, i)
                }

                function n(t, e, i) {
                  return this.superClass[ye][e].apply(t, i)
                }
                var r = t(Fe),
                  a = {},
                  o = ".",
                  s = "___EC__COMPONENT__CONTAINER___",
                  l = "\x00ec_\x00";
                a.set = function (t, e, i) {
                  return t[l + e] = i
                }, a.get = function (t, e) {
                  return t[l + e]
                }, a.hasOwn = function (t, e) {
                  return t.hasOwnProperty(l + e)
                };
                var u = a.parseClassType = function (t) {
                  var e = {
                    main: "",
                    sub: ""
                  };
                  return t && (t = t.split(o), e.main = t[0] || "", e.sub = t[1] || ""), e
                };
                return a.enableClassExtend = function (t, e) {
                  t.$constructor = t, t[ge] = function (t) {
                    var e = this,
                      a = function () {
                        t.$constructor ? t.$constructor.apply(this, arguments) : e.apply(this, arguments)
                      };
                    return r[ge](a[ye], t), a[ge] = this[ge], a.superCall = i, a.superApply = n, r[g](a, this), a.superClass = e, a
                  }
                }, a.enableClassManagement = function (t, i) {
                  function n(t) {
                    var e = a[t.main];
                    return e && e[s] || (e = a[t.main] = {}, e[s] = !0), e
                  }
                  i = i || {};
                  var a = {};
                  if (t.registerClass = function (t, i) {
                      if (i)
                        if (e(i), i = u(i), i.sub) {
                          if (i.sub !== s) {
                            var r = n(i);
                            r[i.sub] = t
                          }
                        } else a[i.main] = t;
                      return t
                    }, t.getClass = function (t, e, i) {
                      var n = a[t];
                      if (n && n[s] && (n = e ? n[e] : null), i && !n) throw new Error(e ? "Component " + t + "." + (e || "") + " not exists. Load it first." : t + ".type should be specified.");
                      return n
                    }, t.getClassesByMainType = function (t) {
                      t = u(t);
                      var e = [],
                        i = a[t.main];
                      return i && i[s] ? r.each(i, function (t, i) {
                        i !== s && e.push(t)
                      }) : e.push(i), e
                    }, t.hasClass = function (t) {
                      return t = u(t), !!a[t.main]
                    }, t.getAllClassMainTypes = function () {
                      var t = [];
                      return r.each(a, function (e, i) {
                        t.push(i)
                      }), t
                    }, t.hasSubTypes = function (t) {
                      t = u(t);
                      var e = a[t.main];
                      return e && e[s]
                    }, t.parseClassType = u, i.registerWhenExtend) {
                    var o = t[ge];
                    o && (t[ge] = function (e) {
                      var i = o.call(this, e);
                      return t.registerClass(i, e.type)
                    })
                  }
                  return t
                }, a.setReadOnly = function () {}, a
              }), e("echarts/data/List", [Ve, "../model/Model", "./DataDiffer", Fe, "../util/model"], function (t) {
                function e(t, e) {
                  f.each(g[se](e.__wrappedMethods || []), function (i) {
                    e.hasOwnProperty(i) && (t[i] = e[i])
                  }), t.__wrappedMethods = e.__wrappedMethods
                }

                function i(t) {
                  this._array = t || []
                }

                function n(t) {
                  return f[y](t) || (t = [t]), t
                }

                function r(t, i) {
                  var n = t[X],
                    r = new x(f.map(n, t.getDimensionInfo, t), t.hostModel);
                  e(r, t);
                  for (var a = r._storage = {}, o = t._storage, s = 0; s < n[ve]; s++) {
                    var l = n[s],
                      u = o[l];
                    a[l] = f[ce](i, l) >= 0 ? new u.constructor(o[l][ve]) : o[l]
                  }
                  return r
                }
                var a = o,
                  s = typeof window === o ? global : window,
                  l = typeof s.Float64Array === a ? Array : s.Float64Array,
                  u = typeof s.Int32Array === a ? Array : s.Int32Array,
                  c = {
                    "float": l,
                    "int": u,
                    ordinal: Array,
                    number: Array,
                    time: Array
                  },
                  h = t("../model/Model"),
                  d = t("./DataDiffer"),
                  f = t(Fe),
                  p = t("../util/model"),
                  v = f[ie],
                  g = ["stackedOn", "hasItemOption", "_nameList", "_idList", "_rawData"];
                i[ye].pure = !1, i[ye].count = function () {
                  return this._array[ve]
                }, i[ye].getItem = function (t) {
                  return this._array[t]
                };
                var x = function (t, e) {
                    t = t || ["x", "y"];
                    for (var i = {}, n = [], r = 0; r < t[ve]; r++) {
                      var a, o = {};
                      typeof t[r] === ue ? (a = t[r], o = {
                        name: a,
                        coordDim: a,
                        coordDimIndex: 0,
                        stackable: !1,
                        type: "number"
                      }) : (o = t[r], a = o.name, o.type = o.type || le, o.coordDim || (o.coordDim = a, o.coordDimIndex = 0)), o.otherDims = o.otherDims || {}, n.push(a), i[a] = o
                    }
                    this[X] = n, this._dimensionInfos = i, this.hostModel = e, this.dataType, this.indices = [], this._storage = {}, this._nameList = [], this._idList = [], this._optionModels = [], this.stackedOn = null, this._visual = {}, this._layout = {}, this._itemVisuals = [], this._itemLayouts = [], this._graphicEls = [], this._rawData, this._extent
                  },
                  _ = x[ye];
                _.type = "list", _.hasItemOption = !0, _.getDimension = function (t) {
                  return isNaN(t) || (t = this[X][t] || t), t
                }, _.getDimensionInfo = function (t) {
                  return f.clone(this._dimensionInfos[this.getDimension(t)])
                }, _.initData = function (t, e, n) {
                  t = t || [];
                  var r = f[y](t);
                  r && (t = new i(t)), this._rawData = t;
                  var a, o = this._storage = {},
                    s = this.indices = [],
                    l = this[X],
                    u = this._dimensionInfos,
                    h = t.count(),
                    d = [],
                    m = {};
                  e = e || [];
                  for (var v = 0; v < l[ve]; v++) {
                    var g = u[l[v]];
                    0 === g.otherDims.itemName && (a = v);
                    var x = c[g.type];
                    o[l[v]] = new x(h)
                  }
                  var _ = this;
                  n || (_.hasItemOption = !1), n = n || function (t, e, i, n) {
                    var r = p.getDataItemValue(t);
                    return p.isDataItemOption(t) && (_.hasItemOption = !0), p.converDataValue(r instanceof Array ? r[n] : r, u[e])
                  };
                  for (var v = 0; h > v; v++) {
                    for (var b = t.getItem(v), w = 0; w < l[ve]; w++) {
                      var M = l[w],
                        T = o[M];
                      T[v] = n(b, M, v, w)
                    }
                    s.push(v)
                  }
                  for (var v = 0; h > v; v++) {
                    var b = t.getItem(v);
                    !e[v] && b && (null != b.name ? e[v] = b.name : null != a && (e[v] = o[l[a]][v]));
                    var S = e[v] || "",
                      P = b && b.id;
                    !P && S && (m[S] = m[S] || 0, P = S, m[S] > 0 && (P += "__ec__" + m[S]), m[S]++), P && (d[v] = P)
                  }
                  this._nameList = e, this._idList = d
                }, _.count = function () {
                  return this.indices[ve]
                }, _.get = function (t, e, i) {
                  var n = this._storage,
                    r = this.indices[e];
                  if (null == r || !n[t]) return 0 / 0;
                  var a = n[t][r];
                  if (i) {
                    var o = this._dimensionInfos[t];
                    if (o && o.stackable)
                      for (var s = this.stackedOn; s;) {
                        var l = s.get(t, e);
                        (a >= 0 && l > 0 || 0 >= a && 0 > l) && (a += l), s = s.stackedOn
                      }
                  }
                  return a
                }, _.getValues = function (t, e, i) {
                  var n = [];
                  f[y](t) || (i = e, e = t, t = this[X]);
                  for (var r = 0, a = t[ve]; a > r; r++) n.push(this.get(t[r], e, i));
                  return n
                }, _.hasValue = function (t) {
                  for (var e = this[X], i = this._dimensionInfos, n = 0, r = e[ve]; r > n; n++)
                    if (i[e[n]].type !== m && isNaN(this.get(e[n], t))) return !1;
                  return !0
                }, _.getDataExtent = function (t, e, i) {
                  t = this.getDimension(t);
                  var n = this._storage[t],
                    r = this.getDimensionInfo(t);
                  e = r && r.stackable && e;
                  var a, o = (this._extent || (this._extent = {}))[t + !!e];
                  if (o) return o;
                  if (n) {
                    for (var s = 1 / 0, l = -1 / 0, u = 0, c = this.count(); c > u; u++) a = this.get(t, u, e), (!i || i(a, t, u)) && (s > a && (s = a), a > l && (l = a));
                    return this._extent[t + !!e] = [s, l]
                  }
                  return [1 / 0, -1 / 0]
                }, _.getSum = function (t, e) {
                  var i = this._storage[t],
                    n = 0;
                  if (i)
                    for (var r = 0, a = this.count(); a > r; r++) {
                      var o = this.get(t, r, e);
                      isNaN(o) || (n += o)
                    }
                  return n
                }, _[ce] = function (t, e) {
                  var i = this._storage,
                    n = i[t],
                    r = this.indices;
                  if (n)
                    for (var a = 0, o = r[ve]; o > a; a++) {
                      var s = r[a];
                      if (n[s] === e) return a
                    }
                  return -1
                }, _.indexOfName = function (t) {
                  for (var e = this.indices, i = this._nameList, n = 0, r = e[ve]; r > n; n++) {
                    var a = e[n];
                    if (i[a] === t) return n
                  }
                  return -1
                }, _.indexOfRawIndex = function (t) {
                  var e = this.indices,
                    i = e[t];
                  if (null != i && i === t) return t;
                  for (var n = 0, r = e[ve] - 1; r >= n;) {
                    var a = (n + r) / 2 | 0;
                    if (e[a] < t) n = a + 1;
                    else {
                      if (!(e[a] > t)) return a;
                      r = a - 1
                    }
                  }
                  return -1
                }, _.indicesOfNearest = function (t, e, i, n) {
                  var r = this._storage,
                    a = r[t],
                    o = [];
                  if (!a) return o;
                  null == n && (n = 1 / 0);
                  for (var s = Number.MAX_VALUE, l = -1, u = 0, c = this.count(); c > u; u++) {
                    var h = e - this.get(t, u, i),
                      d = Math.abs(h);
                    n >= h && s >= d && ((s > d || h >= 0 && 0 > l) && (s = d, l = h, o[ve] = 0), o.push(u))
                  }
                  return o
                }, _.getRawIndex = function (t) {
                  var e = this.indices[t];
                  return null == e ? -1 : e
                }, _.getRawDataItem = function (t) {
                  return this._rawData.getItem(this.getRawIndex(t))
                }, _.getName = function (t) {
                  return this._nameList[this.indices[t]] || ""
                }, _.getId = function (t) {
                  return this._idList[this.indices[t]] || this.getRawIndex(t) + ""
                }, _.each = function (t, e, i, r) {
                  typeof t === oe && (r = i, i = e, e = t, t = []), t = f.map(n(t), this.getDimension, this);
                  var a = [],
                    o = t[ve],
                    s = this.indices;
                  r = r || this;
                  for (var l = 0; l < s[ve]; l++) switch (o) {
                    case 0:
                      e.call(r, l);
                      break;
                    case 1:
                      e.call(r, this.get(t[0], l, i), l);
                      break;
                    case 2:
                      e.call(r, this.get(t[0], l, i), this.get(t[1], l, i), l);
                      break;
                    default:
                      for (var u = 0; o > u; u++) a[u] = this.get(t[u], l, i);
                      a[u] = l, e.apply(r, a)
                  }
                }, _.filterSelf = function (t, e, i, r) {
                  typeof t === oe && (r = i, i = e, e = t, t = []), t = f.map(n(t), this.getDimension, this);
                  var a = [],
                    o = [],
                    s = t[ve],
                    l = this.indices;
                  r = r || this;
                  for (var u = 0; u < l[ve]; u++) {
                    var c;
                    if (s)
                      if (1 === s) c = e.call(r, this.get(t[0], u, i), u);
                      else {
                        for (var h = 0; s > h; h++) o[h] = this.get(t[h], u, i);
                        o[h] = u, c = e.apply(r, o)
                      }
                    else c = e.call(r, u);
                    c && a.push(l[u])
                  }
                  return this.indices = a, this._extent = {}, this
                }, _.mapArray = function (t, e, i, n) {
                  typeof t === oe && (n = i, i = e, e = t, t = []);
                  var r = [];
                  return this.each(t, function () {
                    r.push(e && e.apply(this, arguments))
                  }, i, n), r
                }, _.map = function (t, e, i, a) {
                  t = f.map(n(t), this.getDimension, this);
                  var o = r(this, t),
                    s = o.indices = this.indices,
                    l = o._storage,
                    u = [];
                  return this.each(t, function () {
                    var i = arguments[arguments[ve] - 1],
                      n = e && e.apply(this, arguments);
                    if (null != n) {
                      typeof n === le && (u[0] = n, n = u);
                      for (var r = 0; r < n[ve]; r++) {
                        var a = t[r],
                          o = l[a],
                          c = s[i];
                        o && (o[c] = n[r])
                      }
                    }
                  }, i, a), o
                }, _.downSample = function (t, e, i, n) {
                  for (var a = r(this, [t]), o = this._storage, s = a._storage, l = this.indices, u = a.indices = [], c = [], h = [], d = Math.floor(1 / e), f = s[t], p = this.count(), m = 0; m < o[t][ve]; m++) s[t][m] = o[t][m];
                  for (var m = 0; p > m; m += d) {
                    d > p - m && (d = p - m, c[ve] = d);
                    for (var v = 0; d > v; v++) {
                      var g = l[m + v];
                      c[v] = f[g], h[v] = g
                    }
                    var y = i(c),
                      g = h[n(c, y) || 0];
                    f[g] = y, u.push(g)
                  }
                  return a
                }, _[q] = function (t) {
                  var e = this.hostModel;
                  return t = this.indices[t], new h(this._rawData.getItem(t), e, e && e[pe])
                }, _.diff = function (t) {
                  var e, i = this._idList,
                    n = t && t._idList,
                    r = "e\x00\x00";
                  return new d(t ? t.indices : [], this.indices, function (t) {
                    return null != (e = n[t]) ? e : r + t
                  }, function (t) {
                    return null != (e = i[t]) ? e : r + t
                  })
                }, _.getVisual = function (t) {
                  var e = this._visual;
                  return e && e[t]
                }, _.setVisual = function (t, e) {
                  if (v(t))
                    for (var i in t) t.hasOwnProperty(i) && this.setVisual(i, t[i]);
                  else this._visual = this._visual || {}, this._visual[t] = e
                }, _.setLayout = function (t, e) {
                  if (v(t))
                    for (var i in t) t.hasOwnProperty(i) && this.setLayout(i, t[i]);
                  else this._layout[t] = e
                }, _.getLayout = function (t) {
                  return this._layout[t]
                }, _.getItemLayout = function (t) {
                  return this._itemLayouts[t]
                }, _.setItemLayout = function (t, e, i) {
                  this._itemLayouts[t] = i ? f[ge](this._itemLayouts[t] || {}, e) : e
                }, _.clearItemLayouts = function () {
                  this._itemLayouts[ve] = 0
                }, _[B] = function (t, e, i) {
                  var n = this._itemVisuals[t],
                    r = n && n[e];
                  return null != r || i ? r : this.getVisual(e)
                }, _.setItemVisual = function (t, e, i) {
                  var n = this._itemVisuals[t] || {};
                  if (this._itemVisuals[t] = n, v(e))
                    for (var r in e) e.hasOwnProperty(r) && (n[r] = e[r]);
                  else n[e] = i
                }, _.clearAllVisual = function () {
                  this._visual = {}, this._itemVisuals = []
                };
                var w = function (t) {
                  t[E] = this[E], t[F] = this[F], t.dataType = this.dataType
                };
                return _.setItemGraphicEl = function (t, e) {
                  var i = this.hostModel;
                  e && (e[F] = t, e.dataType = this.dataType, e[E] = i && i[E], "group" === e.type && e[b](w, e)), this._graphicEls[t] = e
                }, _[G] = function (t) {
                  return this._graphicEls[t]
                }, _[V] = function (t, e) {
                  f.each(this._graphicEls, function (i, n) {
                    i && t && t.call(e, i, n)
                  })
                }, _.cloneShallow = function () {
                  var t = f.map(this[X], this.getDimensionInfo, this),
                    i = new x(t, this.hostModel);
                  return i._storage = this._storage, e(i, this), i.indices = this.indices.slice(), this._extent && (i._extent = f[ge]({}, this._extent)), i
                }, _.wrapMethod = function (t, e) {
                  var i = this[t];
                  typeof i === oe && (this.__wrappedMethods = this.__wrappedMethods || [], this.__wrappedMethods.push(t), this[t] = function () {
                    var t = i.apply(this, arguments);
                    return e.apply(this, [t][se](f.slice(arguments)))
                  })
                }, _.TRANSFERABLE_METHODS = ["cloneShallow", "downSample", "map"], _.CHANGABLE_METHODS = ["filterSelf"], x
              }), e("zrender/graphic/Gradient", [Ve], function () {
                var t = function (t) {
                  this[A] = t || []
                };
                return t[ye] = {
                  constructor: t,
                  addColorStop: function (t, e) {
                    this[A].push({
                      offset: t,
                      color: e
                    })
                  }
                }, t
              }), e("zrender/core/PathProxy", [Ve, "./curve", "./vector", "./bbox", "./BoundingRect", "../config"], function (t) {
                var e = t("./curve"),
                  i = t("./vector"),
                  n = t("./bbox"),
                  r = t("./BoundingRect"),
                  a = t("../config").devicePixelRatio,
                  s = {
                    M: 1,
                    L: 2,
                    C: 3,
                    Q: 4,
                    A: 5,
                    Z: 6,
                    R: 7
                  },
                  u = [],
                  c = [],
                  h = [],
                  f = [],
                  p = Math.min,
                  m = Math.max,
                  v = Math.cos,
                  g = Math.sin,
                  y = Math.sqrt,
                  x = Math.abs,
                  _ = typeof Float32Array != o,
                  b = function (t) {
                    this._saveData = !t, this._saveData && (this.data = []), this._ctx = null
                  };
                return b[ye] = {
                  constructor: b,
                  _xi: 0,
                  _yi: 0,
                  _x0: 0,
                  _y0: 0,
                  _ux: 0,
                  _uy: 0,
                  _len: 0,
                  _lineDash: null,
                  _dashOffset: 0,
                  _dashIdx: 0,
                  _dashSum: 0,
                  setScale: function (t, e) {
                    this._ux = x(1 / a / t) || 0, this._uy = x(1 / a / e) || 0
                  },
                  getContext: function () {
                    return this._ctx
                  },
                  beginPath: function (t) {
                    return this._ctx = t, t && t.beginPath(), t && (this.dpr = t.dpr), this._saveData && (this._len = 0), this._lineDash && (this._lineDash = null, this._dashOffset = 0), this
                  },
                  moveTo: function (t, e) {
                    return this.addData(s.M, t, e), this._ctx && this._ctx[l](t, e), this._x0 = t, this._y0 = e, this._xi = t, this._yi = e, this
                  },
                  lineTo: function (t, e) {
                    var i = x(t - this._xi) > this._ux || x(e - this._yi) > this._uy || this._len < 5;
                    return this.addData(s.L, t, e), this._ctx && i && (this._needsDash() ? this._dashedLineTo(t, e) : this._ctx.lineTo(t, e)), i && (this._xi = t, this._yi = e), this
                  },
                  bezierCurveTo: function (t, e, i, n, r, a) {
                    return this.addData(s.C, t, e, i, n, r, a), this._ctx && (this._needsDash() ? this._dashedBezierTo(t, e, i, n, r, a) : this._ctx.bezierCurveTo(t, e, i, n, r, a)), this._xi = r, this._yi = a, this
                  },
                  quadraticCurveTo: function (t, e, i, n) {
                    return this.addData(s.Q, t, e, i, n), this._ctx && (this._needsDash() ? this._dashedQuadraticTo(t, e, i, n) : this._ctx.quadraticCurveTo(t, e, i, n)), this._xi = i, this._yi = n, this
                  },
                  arc: function (t, e, i, n, r, a) {
                    return this.addData(s.A, t, e, i, i, n, r - n, 0, a ? 0 : 1), this._ctx && this._ctx.arc(t, e, i, n, r, a), this._xi = v(r) * i + t, this._yi = g(r) * i + t, this
                  },
                  arcTo: function (t, e, i, n, r) {
                    return this._ctx && this._ctx.arcTo(t, e, i, n, r), this
                  },
                  rect: function (t, e, i, n) {
                    return this._ctx && this._ctx.rect(t, e, i, n), this.addData(s.R, t, e, i, n), this
                  },
                  closePath: function () {
                    this.addData(s.Z);
                    var t = this._ctx,
                      e = this._x0,
                      i = this._y0;
                    return t && (this._needsDash() && this._dashedLineTo(e, i), t.closePath()), this._xi = e, this._yi = i, this
                  },
                  fill: function (t) {
                    t && t.fill(), this.toStatic()
                  },
                  stroke: function (t) {
                    t && t[d](), this.toStatic()
                  },
                  setLineDash: function (t) {
                    if (t instanceof Array) {
                      this._lineDash = t, this._dashIdx = 0;
                      for (var e = 0, i = 0; i < t[ve]; i++) e += t[i];
                      this._dashSum = e
                    }
                    return this
                  },
                  setLineDashOffset: function (t) {
                    return this._dashOffset = t, this
                  },
                  len: function () {
                    return this._len
                  },
                  setData: function (t) {
                    var e = t[ve];
                    this.data && this.data[ve] == e || !_ || (this.data = new Float32Array(e));
                    for (var i = 0; e > i; i++) this.data[i] = t[i];
                    this._len = e
                  },
                  appendPath: function (t) {
                    t instanceof Array || (t = [t]);
                    for (var e = t[ve], i = 0, n = this._len, r = 0; e > r; r++) i += t[r].len();
                    _ && this.data instanceof Float32Array && (this.data = new Float32Array(n + i));
                    for (var r = 0; e > r; r++)
                      for (var a = t[r].data, o = 0; o < a[ve]; o++) this.data[n++] = a[o];
                    this._len = n
                  },
                  addData: function (t) {
                    if (this._saveData) {
                      var e = this.data;
                      this._len + arguments[ve] > e[ve] && (this._expandData(), e = this.data);
                      for (var i = 0; i < arguments[ve]; i++) e[this._len++] = arguments[i];
                      this._prevCmd = t
                    }
                  },
                  _expandData: function () {
                    if (!(this.data instanceof Array)) {
                      for (var t = [], e = 0; e < this._len; e++) t[e] = this.data[e];
                      this.data = t
                    }
                  },
                  _needsDash: function () {
                    return this._lineDash
                  },
                  _dashedLineTo: function (t, e) {
                    var i, n, r = this._dashSum,
                      a = this._dashOffset,
                      o = this._lineDash,
                      s = this._ctx,
                      u = this._xi,
                      c = this._yi,
                      h = t - u,
                      d = e - c,
                      f = y(h * h + d * d),
                      v = u,
                      g = c,
                      x = o[ve];
                    for (h /= f, d /= f, 0 > a && (a = r + a), a %= r, v -= a * h, g -= a * d; h > 0 && t >= v || 0 > h && v >= t || 0 == h && (d > 0 && e >= g || 0 > d && g >= e);) n = this._dashIdx, i = o[n], v += h * i, g += d * i, this._dashIdx = (n + 1) % x, h > 0 && u > v || 0 > h && v > u || d > 0 && c > g || 0 > d && g > c || s[n % 2 ? l : "lineTo"](h >= 0 ? p(v, t) : m(v, t), d >= 0 ? p(g, e) : m(g, e));
                    h = v - t, d = g - e, this._dashOffset = -y(h * h + d * d)
                  },
                  _dashedBezierTo: function (t, i, n, r, a, o) {
                    var s, u, c, h, d, f = this._dashSum,
                      p = this._dashOffset,
                      m = this._lineDash,
                      v = this._ctx,
                      g = this._xi,
                      x = this._yi,
                      _ = e.cubicAt,
                      b = 0,
                      w = this._dashIdx,
                      M = m[ve],
                      T = 0;
                    for (0 > p && (p = f + p), p %= f, s = 0; 1 > s; s += .1) u = _(g, t, n, a, s + .1) - _(g, t, n, a, s), c = _(x, i, r, o, s + .1) - _(x, i, r, o, s), b += y(u * u + c * c);
                    for (; M > w && (T += m[w], !(T > p)); w++);
                    for (s = (T - p) / b; 1 >= s;) h = _(g, t, n, a, s), d = _(x, i, r, o, s), w % 2 ? v[l](h, d) : v.lineTo(h, d), s += m[w] / b, w = (w + 1) % M;
                    w % 2 !== 0 && v.lineTo(a, o), u = a - h, c = o - d, this._dashOffset = -y(u * u + c * c)
                  },
                  _dashedQuadraticTo: function (t, e, i, n) {
                    var r = i,
                      a = n;
                    i = (i + 2 * t) / 3, n = (n + 2 * e) / 3, t = (this._xi + 2 * t) / 3, e = (this._yi + 2 * e) / 3, this._dashedBezierTo(t, e, i, n, r, a)
                  },
                  toStatic: function () {
                    var t = this.data;
                    t instanceof Array && (t[ve] = this._len, _ && (this.data = new Float32Array(t)))
                  },
                  getBoundingRect: function () {
                    u[0] = u[1] = h[0] = h[1] = Number.MAX_VALUE, c[0] = c[1] = f[0] = f[1] = -Number.MAX_VALUE;
                    for (var t = this.data, e = 0, a = 0, o = 0, l = 0, d = 0; d < t[ve];) {
                      var p = t[d++];
                      switch (1 == d && (e = t[d], a = t[d + 1], o = e, l = a), p) {
                        case s.M:
                          o = t[d++], l = t[d++], e = o, a = l, h[0] = o, h[1] = l, f[0] = o, f[1] = l;
                          break;
                        case s.L:
                          n.fromLine(e, a, t[d], t[d + 1], h, f), e = t[d++], a = t[d++];
                          break;
                        case s.C:
                          n.fromCubic(e, a, t[d++], t[d++], t[d++], t[d++], t[d], t[d + 1], h, f), e = t[d++], a = t[d++];
                          break;
                        case s.Q:
                          n.fromQuadratic(e, a, t[d++], t[d++], t[d], t[d + 1], h, f), e = t[d++], a = t[d++];
                          break;
                        case s.A:
                          var m = t[d++],
                            y = t[d++],
                            x = t[d++],
                            _ = t[d++],
                            b = t[d++],
                            w = t[d++] + b,
                            M = (t[d++], 1 - t[d++]);
                          1 == d && (o = v(b) * x + m, l = g(b) * _ + y), n.fromArc(m, y, x, _, b, w, M, h, f), e = v(w) * x + m, a = g(w) * _ + y;
                          break;
                        case s.R:
                          o = e = t[d++], l = a = t[d++];
                          var T = t[d++],
                            S = t[d++];
                          n.fromLine(o, l, o + T, l + S, h, f);
                          break;
                        case s.Z:
                          e = o, a = l
                      }
                      i.min(u, u, h), i.max(c, c, f)
                    }
                    return 0 === d && (u[0] = u[1] = c[0] = c[1] = 0), new r(u[0], u[1], c[0] - u[0], c[1] - u[1])
                  },
                  rebuildPath: function (t) {
                    for (var e, i, n, r, a, o, u = this.data, c = this._ux, h = this._uy, d = this._len, f = 0; d > f;) {
                      var p = u[f++];
                      switch (1 == f && (n = u[f], r = u[f + 1], e = n, i = r), p) {
                        case s.M:
                          e = n = u[f++], i = r = u[f++], t[l](n, r);
                          break;
                        case s.L:
                          a = u[f++], o = u[f++], (x(a - n) > c || x(o - r) > h || f === d - 1) && (t.lineTo(a, o), n = a, r = o);
                          break;
                        case s.C:
                          t.bezierCurveTo(u[f++], u[f++], u[f++], u[f++], u[f++], u[f++]), n = u[f - 2], r = u[f - 1];
                          break;
                        case s.Q:
                          t.quadraticCurveTo(u[f++], u[f++], u[f++], u[f++]), n = u[f - 2], r = u[f - 1];
                          break;
                        case s.A:
                          var m = u[f++],
                            y = u[f++],
                            _ = u[f++],
                            b = u[f++],
                            w = u[f++],
                            M = u[f++],
                            T = u[f++],
                            S = u[f++],
                            P = _ > b ? _ : b,
                            C = _ > b ? 1 : _ / b,
                            A = _ > b ? b / _ : 1,
                            L = Math.abs(_ - b) > .001,
                            k = w + M;
                          L ? (t.translate(m, y), t.rotate(T), t.scale(C, A), t.arc(0, 0, P, w, k, 1 - S), t.scale(1 / C, 1 / A), t.rotate(-T), t.translate(-m, -y)) : t.arc(m, y, P, w, k, 1 - S), 1 == f && (e = v(w) * _ + m, i = g(w) * b + y), n = v(k) * _ + m, r = g(k) * b + y;
                          break;
                        case s.R:
                          e = n = u[f], i = r = u[f + 1], t.rect(u[f++], u[f++], u[f++], u[f++]);
                          break;
                        case s.Z:
                          t.closePath(), n = e, r = i
                      }
                    }
                  }
                }, b.CMD = s, b
              }), e("zrender/graphic/mixin/RectText", [Ve, "../../contain/text", "../../core/BoundingRect"], function (t) {
                function e(t, e) {
                  return typeof t === ue ? t.lastIndexOf("%") >= 0 ? parseFloat(t) / 100 * e : parseFloat(t) : t
                }
                var a = t("../../contain/text"),
                  o = t("../../core/BoundingRect"),
                  s = new o,
                  l = function () {};
                return l[ye] = {
                  constructor: l,
                  drawRectText: function (t, o, l) {
                    var c = this.style,
                      h = c.text;
                    if (null != h && (h += ""), h) {
                      t.save();
                      var d, f, m = c.textPosition,
                        v = c.textOffset,
                        g = c.textDistance,
                        y = c[ze],
                        x = c.textFont || c.font,
                        _ = c.textBaseline,
                        b = c.textVerticalAlign;
                      o = c.textPositionRect || o, l = l || a[ke](h, x, y, _);
                      var w = this[u];
                      if (c.textTransform ? this.setTransform(t) : w && (s.copy(o), s[p](w), o = s), m instanceof Array) {
                        if (d = o.x + e(m[0], o.width), f = o.y + e(m[1], o[Le]), y = y || "left", _ = _ || "top", b) {
                          switch (b) {
                            case Te:
                              f -= l[Le] / 2 - l.lineHeight / 2;
                              break;
                            case we:
                              f -= l[Le] - l.lineHeight / 2;
                              break;
                            default:
                              f += l.lineHeight / 2
                          }
                          _ = Te
                        }
                      } else {
                        var M = a.adjustTextPositionOnRect(m, o, l, g);
                        d = M.x, f = M.y, y = y || M[ze], _ = _ || M.textBaseline
                      }
                      v && (d += v[0], f += v[1]), t[ze] = y || "left", t.textBaseline = _ || "alphabetic";
                      var T = c.textFill,
                        S = c.textStroke;
                      T && (t.fillStyle = T), S && (t.strokeStyle = S), t.font = x || "12px sans-serif", t[r] = c.textShadowBlur, t.shadowColor = c.textShadowColor || L, t[n] = c.textShadowOffsetX, t[i] = c.textShadowOffsetY;
                      var P = h.split("\n");
                      c.textRotation && (w && t.translate(w[4], w[5]), t.rotate(c.textRotation), w && t.translate(-w[4], -w[5]));
                      for (var C = 0; C < P[ve]; C++) S && t.strokeText(P[C], d, f), T && t.fillText(P[C], d, f), f += l.lineHeight;
                      t.restore()
                    }
                  }
                }, l
              }), e("zrender/graphic/Displayable", [Ve, a, "./Style", "../Element", "./mixin/RectText"], function (t) {
                function e(t) {
                  t = t || {}, r.call(this, t);
                  for (var e in t) t.hasOwnProperty(e) && "style" !== e && (this[e] = t[e]);
                  this.style = new n(t.style), this._rect = null, this.__clipPaths = []
                }
                var i = t(a),
                  n = t("./Style"),
                  r = t("../Element"),
                  o = t("./mixin/RectText");
                return e[ye] = {
                  constructor: e,
                  type: "displayable",
                  __dirty: !0,
                  invisible: !1,
                  z: 0,
                  z2: 0,
                  zlevel: 0,
                  draggable: !1,
                  dragging: !1,
                  silent: !1,
                  culling: !1,
                  cursor: "pointer",
                  rectHover: !1,
                  progressive: -1,
                  beforeBrush: function () {},
                  afterBrush: function () {},
                  brush: function () {},
                  getBoundingRect: function () {},
                  contain: function (t, e) {
                    return this.rectContain(t, e)
                  },
                  traverse: function (t, e) {
                    t.call(e, this)
                  },
                  rectContain: function (t, e) {
                    var i = this.transformCoordToLocal(t, e),
                      n = this[ke]();
                    return n.contain(i[0], i[1])
                  },
                  dirty: function () {
                    this[s] = !0, this._rect = null, this.__zr && this.__zr.refresh()
                  },
                  animateStyle: function (t) {
                    return this.animate("style", t)
                  },
                  attrKV: function (t, e) {
                    "style" !== t ? r[ye].attrKV.call(this, t, e) : this.style.set(e)
                  },
                  setStyle: function (t, e) {
                    return this.style.set(t, e), this.dirty(!1), this
                  },
                  useStyle: function (t) {
                    return this.style = new n(t), this.dirty(!1), this
                  }
                }, i[g](e, r), i.mixin(e, o), e
              }), e("zrender/vml/core", [Ve, "exports", "module", "../core/env"], function (t, e, i) {
                if (!t("../core/env")[I]) {
                  var n, r = "urn:schemas-microsoft-com:vml",
                    a = window,
                    o = a.document,
                    s = !1;
                  try {
                    !o.namespaces.zrvml && o.namespaces.add("zrvml", r), n = function (t) {
                      return o[he]("<zrvml:" + t + ' class="zrvml">')
                    }
                  } catch (l) {
                    n = function (t) {
                      return o[he]("<" + t + ' xmlns="' + r + '" class="zrvml">')
                    }
                  }
                  var u = function () {
                    if (!s) {
                      s = !0;
                      var t = o.styleSheets;
                      t[ve] < 31 ? o.createStyleSheet().addRule(".zrvml", "behavior:url(#default#VML)") : t[0].addRule(".zrvml", "behavior:url(#default#VML)")
                    }
                  };
                  i.exports = {
                    doc: o,
                    initVML: u,
                    createNode: n
                  }
                }
              }), e("echarts/model/globalDefault", [], function () {
                var t = "";
                return typeof navigator !== o && (t = navigator.platform || ""), {
                  color: ["#c23531", "#2f4554", "#61a0a8", "#d48265", "#91c7ae", "#749f83", "#ca8622", "#bda29a", "#6e7074", "#546570", "#c4ccd3"],
                  textStyle: {
                    fontFamily: t.match(/^Win/) ? "Microsoft YaHei" : "sans-serif",
                    fontSize: 12,
                    fontStyle: "normal",
                    fontWeight: "normal"
                  },
                  blendMode: null,
                  animation: "auto",
                  animationDuration: 1e3,
                  animationDurationUpdate: 300,
                  animationEasing: "exponentialOut",
                  animationEasingUpdate: "cubicOut",
                  animationThreshold: 2e3,
                  progressiveThreshold: 3e3,
                  progressive: 400,
                  hoverLayerThreshold: 3e3,
                  useUTC: !1
                }
              }), e("echarts/model/mixin/colorPalette", [Ve, "../../util/clazz"], function (t) {
                var e = t("../../util/clazz"),
                  i = e.set,
                  n = e.get;
                return {
                  clearColorPalette: function () {
                    i(this, "colorIdx", 0), i(this, "colorNameMap", {})
                  },
                  getColorFromPalette: function (t, e) {
                    e = e || this;
                    var r = n(e, "colorIdx") || 0,
                      a = n(e, "colorNameMap") || i(e, "colorNameMap", {});
                    if (a.hasOwnProperty(t)) return a[t];
                    var o = this.get("color", !0) || [];
                    if (o[ve]) {
                      var s = o[r];
                      return t && (a[t] = s), i(e, "colorIdx", (r + 1) % o[ve]), s
                    }
                  }
                }
              }), e("echarts/model/mixin/areaStyle", [Ve, "./makeStyleMapper"], function (t) {
                return {
                  getAreaStyle: t("./makeStyleMapper")([
                    ["fill", "color"],
                    [r],
                    [n],
                    [i],
                    [xe],
                    ["shadowColor"]
                  ])
                }
              }), e("echarts/model/mixin/itemStyle", [Ve, "./makeStyleMapper"], function (t) {
                var e = t("./makeStyleMapper")([
                  ["fill", "color"],
                  [d, "borderColor"],
                  [f, "borderWidth"],
                  [xe],
                  [r],
                  [n],
                  [i],
                  ["shadowColor"],
                  ["textPosition"],
                  [ze]
                ]);
                return {
                  getItemStyle: function (t, i) {
                    var n = e.call(this, t, i),
                      r = this.getBorderLineDash();
                    return r && (n.lineDash = r), n
                  },
                  getBorderLineDash: function () {
                    var t = this.get("borderType");
                    return "solid" === t || null == t ? null : "dashed" === t ? [5, 5] : [1, 1]
                  }
                }
              }), e("echarts/model/mixin/lineStyle", [Ve, "./makeStyleMapper"], function (t) {
                var e = t("./makeStyleMapper")([
                  [f, "width"],
                  [d, "color"],
                  [xe],
                  [r],
                  [n],
                  [i],
                  ["shadowColor"]
                ]);
                return {
                  getLineStyle: function (t) {
                    var i = e.call(this, t),
                      n = this.getLineDash(i[f]);
                    return n && (i.lineDash = n), i
                  },
                  getLineDash: function (t) {
                    null == t && (t = 1);
                    var e = this.get("type"),
                      i = Math.max(t, 2),
                      n = 4 * t;
                    return "solid" === e || null == e ? null : "dashed" === e ? [n, n] : [i, i]
                  }
                }
              }), e("echarts/model/mixin/textStyle", [Ve, "zrender/contain/text", Z], function (t) {
                var e = t("zrender/contain/text"),
                  i = t(Z);
                return {
                  getTextColor: function () {
                    var t = this[pe];
                    return this[R]("color") || t && t.get("textStyle.color")
                  },
                  getFont: function () {
                    return i[Ie]({
                      fontStyle: this[R]("fontStyle"),
                      fontWeight: this[R]("fontWeight"),
                      fontSize: this[R]("fontSize"),
                      fontFamily: this[R]("fontFamily")
                    }, this[pe])
                  },
                  getTextRect: function (t) {
                    return e[ke](t, this[Ie](), this[R]("align"), this[R]("baseline"))
                  },
                  truncateText: function (t, i, n, r) {
                    return e.truncateText(t, i, this[Ie](), n, r)
                  }
                }
              }), e("zrender/tool/transformPath", [Ve, "../core/PathProxy", "../core/vector"], function (t) {
                function e(t, e) {
                  var n, l, u, c, h, d, f = t.data,
                    p = i.M,
                    m = i.C,
                    v = i.L,
                    g = i.R,
                    y = i.A,
                    x = i.Q;
                  for (u = 0, c = 0; u < f[ve];) {
                    switch (n = f[u++], c = u, l = 0, n) {
                      case p:
                        l = 1;
                        break;
                      case v:
                        l = 1;
                        break;
                      case m:
                        l = 3;
                        break;
                      case x:
                        l = 2;
                        break;
                      case y:
                        var _ = e[4],
                          b = e[5],
                          w = o(e[0] * e[0] + e[1] * e[1]),
                          M = o(e[2] * e[2] + e[3] * e[3]),
                          T = s(-e[1] / M, e[0] / w);
                        f[u] *= w, f[u++] += _, f[u] *= M, f[u++] += b, f[u++] *= w, f[u++] *= M, f[u++] += T, f[u++] += T, u += 2, c = u;
                        break;
                      case g:
                        d[0] = f[u++], d[1] = f[u++], r(d, d, e), f[c++] = d[0], f[c++] = d[1], d[0] += f[u++], d[1] += f[u++], r(d, d, e), f[c++] = d[0], f[c++] = d[1]
                    }
                    for (h = 0; l > h; h++) {
                      var d = a[h];
                      d[0] = f[u++], d[1] = f[u++], r(d, d, e), f[c++] = d[0], f[c++] = d[1]
                    }
                  }
                }
                var i = t("../core/PathProxy").CMD,
                  n = t("../core/vector"),
                  r = n[p],
                  a = [
                    [],
                    [],
                    []
                  ],
                  o = Math.sqrt,
                  s = Math.atan2;
                return e
              }), e("zrender/graphic/Pattern", [Ve], function () {
                var t = function (t, e) {
                  this.image = t, this.repeat = e, this.type = "pattern"
                };
                return t[ye].getCanvasPattern = function (t) {
                  return t.createPattern(this.image, this.repeat || "repeat")
                }, t
              }), e("zrender/contain/path", [Ve, "../core/PathProxy", "./line", "./cubic", "./quadratic", "./arc", "./util", "../core/curve", "./windingLine"], function (t) {
                function e(t, e) {
                  return Math.abs(t - e) < g
                }

                function i() {
                  var t = x[0];
                  x[0] = x[1], x[1] = t
                }

                function n(t, e, n, r, a, o, s, l, u, c) {
                  if (c > e && c > r && c > o && c > l || e > c && r > c && o > c && l > c) return 0;
                  var h = f.cubicRootAt(e, r, o, l, c, y);
                  if (0 === h) return 0;
                  for (var d, p, m = 0, v = -1, g = 0; h > g; g++) {
                    var _ = y[g],
                      b = 0 === _ || 1 === _ ? .5 : 1,
                      w = f.cubicAt(t, n, a, s, _);
                    u > w || (0 > v && (v = f.cubicExtrema(e, r, o, l, x), x[1] < x[0] && v > 1 && i(), d = f.cubicAt(e, r, o, l, x[0]), v > 1 && (p = f.cubicAt(e, r, o, l, x[1]))), m += 2 == v ? _ < x[0] ? e > d ? b : -b : _ < x[1] ? d > p ? b : -b : p > l ? b : -b : _ < x[0] ? e > d ? b : -b : d > l ? b : -b)
                  }
                  return m
                }

                function r(t, e, i, n, r, a, o, s) {
                  if (s > e && s > n && s > a || e > s && n > s && a > s) return 0;
                  var l = f.quadraticRootAt(e, n, a, s, y);
                  if (0 === l) return 0;
                  var u = f.quadraticExtremum(e, n, a);
                  if (u >= 0 && 1 >= u) {
                    for (var c = 0, h = f.quadraticAt(e, n, a, u), d = 0; l > d; d++) {
                      var p = 0 === y[d] || 1 === y[d] ? .5 : 1,
                        m = f.quadraticAt(t, i, r, y[d]);
                      o > m || (c += y[d] < u ? e > h ? p : -p : h > a ? p : -p)
                    }
                    return c
                  }
                  var p = 0 === y[0] || 1 === y[0] ? .5 : 1,
                    m = f.quadraticAt(t, i, r, y[0]);
                  return o > m ? 0 : e > a ? p : -p
                }

                function a(t, e, i, n, r, a, o, s) {
                  if (s -= e, s > i || -i > s) return 0;
                  var l = Math.sqrt(i * i - s * s);
                  y[0] = -l, y[1] = l;
                  var u = Math.abs(n - r);
                  if (1e-4 > u) return 0;
                  if (1e-4 > u % v) {
                    n = 0, r = v;
                    var c = a ? 1 : -1;
                    return o >= y[0] + t && o <= y[1] + t ? c : 0
                  }
                  if (a) {
                    var l = n;
                    n = d(r), r = d(l)
                  } else n = d(n), r = d(r);
                  n > r && (r += v);
                  for (var h = 0, f = 0; 2 > f; f++) {
                    var p = y[f];
                    if (p + t > o) {
                      var m = Math.atan2(s, p),
                        c = a ? 1 : -1;
                      0 > m && (m = v + m), (m >= n && r >= m || m + v >= n && r >= m + v) && (m > Math.PI / 2 && m < 1.5 * Math.PI && (c = -c), h += c)
                    }
                  }
                  return h
                }

                function o(t, i, o, l, d) {
                  for (var f = 0, v = 0, g = 0, y = 0, x = 0, _ = 0; _ < t[ve];) {
                    var b = t[_++];
                    switch (b === s.M && _ > 1 && (o || (f += p(v, g, y, x, l, d))), 1 == _ && (v = t[_], g = t[_ + 1], y = v, x = g), b) {
                      case s.M:
                        y = t[_++], x = t[_++], v = y, g = x;
                        break;
                      case s.L:
                        if (o) {
                          if (m(v, g, t[_], t[_ + 1], i, l, d)) return !0
                        } else f += p(v, g, t[_], t[_ + 1], l, d) || 0;
                        v = t[_++], g = t[_++];
                        break;
                      case s.C:
                        if (o) {
                          if (u.containStroke(v, g, t[_++], t[_++], t[_++], t[_++], t[_], t[_ + 1], i, l, d)) return !0
                        } else f += n(v, g, t[_++], t[_++], t[_++], t[_++], t[_], t[_ + 1], l, d) || 0;
                        v = t[_++], g = t[_++];
                        break;
                      case s.Q:
                        if (o) {
                          if (c.containStroke(v, g, t[_++], t[_++], t[_], t[_ + 1], i, l, d)) return !0
                        } else f += r(v, g, t[_++], t[_++], t[_], t[_ + 1], l, d) || 0;
                        v = t[_++], g = t[_++];
                        break;
                      case s.A:
                        var w = t[_++],
                          M = t[_++],
                          T = t[_++],
                          S = t[_++],
                          P = t[_++],
                          C = t[_++],
                          A = (t[_++], 1 - t[_++]),
                          L = Math.cos(P) * T + w,
                          k = Math.sin(P) * S + M;
                        _ > 1 ? f += p(v, g, L, k, l, d) : (y = L, x = k);
                        var I = (l - w) * S / T + w;
                        if (o) {
                          if (h.containStroke(w, M, S, P, P + C, A, i, I, d)) return !0
                        } else f += a(w, M, S, P, P + C, A, I, d);
                        v = Math.cos(P + C) * T + w, g = Math.sin(P + C) * S + M;
                        break;
                      case s.R:
                        y = v = t[_++], x = g = t[_++];
                        var z = t[_++],
                          D = t[_++],
                          L = y + z,
                          k = x + D;
                        if (o) {
                          if (m(y, x, L, x, i, l, d) || m(L, x, L, k, i, l, d) || m(L, k, y, k, i, l, d) || m(y, k, y, x, i, l, d)) return !0
                        } else f += p(L, x, L, k, l, d), f += p(y, k, y, x, l, d);
                        break;
                      case s.Z:
                        if (o) {
                          if (m(v, g, y, x, i, l, d)) return !0
                        } else f += p(v, g, y, x, l, d);
                        v = y, g = x
                    }
                  }
                  return o || e(g, x) || (f += p(v, g, y, x, l, d) || 0), 0 !== f
                }
                var s = t("../core/PathProxy").CMD,
                  l = t("./line"),
                  u = t("./cubic"),
                  c = t("./quadratic"),
                  h = t("./arc"),
                  d = t("./util").normalizeRadian,
                  f = t("../core/curve"),
                  p = t("./windingLine"),
                  m = l.containStroke,
                  v = 2 * Math.PI,
                  g = 1e-4,
                  y = [-1, -1, -1],
                  x = [-1, -1];
                return {
                  contain: function (t, e, i) {
                    return o(t, 0, !1, e, i)
                  },
                  containStroke: function (t, e, i, n) {
                    return o(t, e, !0, i, n)
                  }
                }
              }), e("echarts/scale/Ordinal", [Ve, Fe, "./Scale"], function (t) {
                var e = t(Fe),
                  i = t("./Scale"),
                  n = i[ye],
                  r = i[ge]({
                    type: "ordinal",
                    init: function (t, e) {
                      this._data = t, this._extent = e || [0, t[ve] - 1]
                    },
                    parse: function (t) {
                      return typeof t === ue ? e[ce](this._data, t) : Math.round(t)
                    },
                    contain: function (t) {
                      return t = this.parse(t), n.contain.call(this, t) && null != this._data[t]
                    },
                    normalize: function (t) {
                      return n.normalize.call(this, this.parse(t))
                    },
                    scale: function (t) {
                      return Math.round(n.scale.call(this, t))
                    },
                    getTicks: function () {
                      for (var t = [], e = this._extent, i = e[0]; i <= e[1];) t.push(i), i++;
                      return t
                    },
                    getLabel: function (t) {
                      return this._data[t]
                    },
                    count: function () {
                      return this._extent[1] - this._extent[0] + 1
                    },
                    unionExtentFromData: function (t, e) {
                      this.unionExtent(t.getDataExtent(e, !1))
                    },
                    niceTicks: e.noop,
                    niceExtent: e.noop
                  });
                return r[me] = function () {
                  return new r
                }, r
              }), e("zrender/config", [], function () {
                var t = 1;
                typeof window !== o && (t = Math.max(window.devicePixelRatio || 1, 1));
                var e = {
                  debugMode: 0,
                  devicePixelRatio: t
                };
                return e
              }), e("zrender/core/curve", [Ve, "./vector"], function (t) {
                function e(t) {
                  return t > -_ && _ > t
                }

                function i(t) {
                  return t > _ || -_ > t
                }

                function n(t, e, i, n, r) {
                  var a = 1 - r;
                  return a * a * (a * t + 3 * r * e) + r * r * (r * n + 3 * a * i)
                }

                function r(t, e, i, n, r) {
                  var a = 1 - r;
                  return 3 * (((e - t) * a + 2 * (i - e) * r) * a + (n - i) * r * r)
                }

                function a(t, i, n, r, a, o) {
                  var s = r + 3 * (i - n) - t,
                    l = 3 * (n - 2 * i + t),
                    u = 3 * (i - t),
                    c = t - a,
                    h = l * l - 3 * s * u,
                    d = l * u - 9 * s * c,
                    f = u * u - 3 * l * c,
                    p = 0;
                  if (e(h) && e(d))
                    if (e(l)) o[0] = 0;
                    else {
                      var m = -u / l;
                      m >= 0 && 1 >= m && (o[p++] = m)
                    }
                  else {
                    var v = d * d - 4 * h * f;
                    if (e(v)) {
                      var g = d / h,
                        m = -l / s + g,
                        _ = -g / 2;
                      m >= 0 && 1 >= m && (o[p++] = m), _ >= 0 && 1 >= _ && (o[p++] = _)
                    } else if (v > 0) {
                      var b = x(v),
                        T = h * l + 1.5 * s * (-d + b),
                        S = h * l + 1.5 * s * (-d - b);
                      T = 0 > T ? -y(-T, M) : y(T, M), S = 0 > S ? -y(-S, M) : y(S, M);
                      var m = (-l - (T + S)) / (3 * s);
                      m >= 0 && 1 >= m && (o[p++] = m)
                    } else {
                      var P = (2 * h * l - 3 * s * d) / (2 * x(h * h * h)),
                        C = Math.acos(P) / 3,
                        A = x(h),
                        L = Math.cos(C),
                        m = (-l - 2 * A * L) / (3 * s),
                        _ = (-l + A * (L + w * Math.sin(C))) / (3 * s),
                        k = (-l + A * (L - w * Math.sin(C))) / (3 * s);
                      m >= 0 && 1 >= m && (o[p++] = m), _ >= 0 && 1 >= _ && (o[p++] = _), k >= 0 && 1 >= k && (o[p++] = k)
                    }
                  }
                  return p
                }

                function o(t, n, r, a, o) {
                  var s = 6 * r - 12 * n + 6 * t,
                    l = 9 * n + 3 * a - 3 * t - 9 * r,
                    u = 3 * n - 3 * t,
                    c = 0;
                  if (e(l)) {
                    if (i(s)) {
                      var h = -u / s;
                      h >= 0 && 1 >= h && (o[c++] = h)
                    }
                  } else {
                    var d = s * s - 4 * l * u;
                    if (e(d)) o[0] = -s / (2 * l);
                    else if (d > 0) {
                      var f = x(d),
                        h = (-s + f) / (2 * l),
                        p = (-s - f) / (2 * l);
                      h >= 0 && 1 >= h && (o[c++] = h), p >= 0 && 1 >= p && (o[c++] = p)
                    }
                  }
                  return c
                }

                function s(t, e, i, n, r, a) {
                  var o = (e - t) * r + t,
                    s = (i - e) * r + e,
                    l = (n - i) * r + i,
                    u = (s - o) * r + o,
                    c = (l - s) * r + s,
                    h = (c - u) * r + u;
                  a[0] = t, a[1] = o, a[2] = u, a[3] = h, a[4] = h, a[5] = c, a[6] = l, a[7] = n
                }

                function l(t, e, i, r, a, o, s, l, u, c, h) {
                  var d, f, p, m, v, y = .005,
                    _ = 1 / 0;
                  T[0] = u, T[1] = c;
                  for (var w = 0; 1 > w; w += .05) S[0] = n(t, i, a, s, w), S[1] = n(e, r, o, l, w), m = g(T, S), _ > m && (d = w, _ = m);
                  _ = 1 / 0;
                  for (var M = 0; 32 > M && !(b > y); M++) f = d - y, p = d + y, S[0] = n(t, i, a, s, f), S[1] = n(e, r, o, l, f), m = g(S, T), f >= 0 && _ > m ? (d = f, _ = m) : (P[0] = n(t, i, a, s, p), P[1] = n(e, r, o, l, p), v = g(P, T), 1 >= p && _ > v ? (d = p, _ = v) : y *= .5);
                  return h && (h[0] = n(t, i, a, s, d), h[1] = n(e, r, o, l, d)), x(_)
                }

                function u(t, e, i, n) {
                  var r = 1 - n;
                  return r * (r * t + 2 * n * e) + n * n * i
                }

                function c(t, e, i, n) {
                  return 2 * ((1 - n) * (e - t) + n * (i - e))
                }

                function h(t, n, r, a, o) {
                  var s = t - 2 * n + r,
                    l = 2 * (n - t),
                    u = t - a,
                    c = 0;
                  if (e(s)) {
                    if (i(l)) {
                      var h = -u / l;
                      h >= 0 && 1 >= h && (o[c++] = h)
                    }
                  } else {
                    var d = l * l - 4 * s * u;
                    if (e(d)) {
                      var h = -l / (2 * s);
                      h >= 0 && 1 >= h && (o[c++] = h)
                    } else if (d > 0) {
                      var f = x(d),
                        h = (-l + f) / (2 * s),
                        p = (-l - f) / (2 * s);
                      h >= 0 && 1 >= h && (o[c++] = h), p >= 0 && 1 >= p && (o[c++] = p)
                    }
                  }
                  return c
                }

                function d(t, e, i) {
                  var n = t + i - 2 * e;
                  return 0 === n ? .5 : (t - e) / n
                }

                function f(t, e, i, n, r) {
                  var a = (e - t) * n + t,
                    o = (i - e) * n + e,
                    s = (o - a) * n + a;
                  r[0] = t, r[1] = a, r[2] = s, r[3] = s, r[4] = o, r[5] = i
                }

                function p(t, e, i, n, r, a, o, s, l) {
                  var c, h = .005,
                    d = 1 / 0;
                  T[0] = o, T[1] = s;
                  for (var f = 0; 1 > f; f += .05) {
                    S[0] = u(t, i, r, f), S[1] = u(e, n, a, f);
                    var p = g(T, S);
                    d > p && (c = f, d = p)
                  }
                  d = 1 / 0;
                  for (var m = 0; 32 > m && !(b > h); m++) {
                    var v = c - h,
                      y = c + h;
                    S[0] = u(t, i, r, v), S[1] = u(e, n, a, v);
                    var p = g(S, T);
                    if (v >= 0 && d > p) c = v, d = p;
                    else {
                      P[0] = u(t, i, r, y), P[1] = u(e, n, a, y);
                      var _ = g(P, T);
                      1 >= y && d > _ ? (c = y, d = _) : h *= .5
                    }
                  }
                  return l && (l[0] = u(t, i, r, c), l[1] = u(e, n, a, c)), x(d)
                }
                var m = t("./vector"),
                  v = m[me],
                  g = m.distSquare,
                  y = Math.pow,
                  x = Math.sqrt,
                  _ = 1e-8,
                  b = 1e-4,
                  w = x(3),
                  M = 1 / 3,
                  T = v(),
                  S = v(),
                  P = v();
                return {
                  cubicAt: n,
                  cubicDerivativeAt: r,
                  cubicRootAt: a,
                  cubicExtrema: o,
                  cubicSubdivide: s,
                  cubicProjectPoint: l,
                  quadraticAt: u,
                  quadraticDerivativeAt: c,
                  quadraticRootAt: h,
                  quadraticExtremum: d,
                  quadraticSubdivide: f,
                  quadraticProjectPoint: p
                }
              }), e("zrender/core/bbox", [Ve, "./vector", "./curve"], function (t) {
                var e = t("./vector"),
                  i = t("./curve"),
                  n = {},
                  r = Math.min,
                  a = Math.max,
                  o = Math.sin,
                  s = Math.cos,
                  l = e[me](),
                  u = e[me](),
                  c = e[me](),
                  h = 2 * Math.PI;
                n.fromPoints = function (t, e, i) {
                  if (0 !== t[ve]) {
                    var n, o = t[0],
                      s = o[0],
                      l = o[0],
                      u = o[1],
                      c = o[1];
                    for (n = 1; n < t[ve]; n++) o = t[n], s = r(s, o[0]), l = a(l, o[0]), u = r(u, o[1]), c = a(c, o[1]);
                    e[0] = s, e[1] = u, i[0] = l, i[1] = c
                  }
                }, n.fromLine = function (t, e, i, n, o, s) {
                  o[0] = r(t, i), o[1] = r(e, n), s[0] = a(t, i), s[1] = a(e, n)
                };
                var d = [],
                  f = [];
                return n.fromCubic = function (t, e, n, o, s, l, u, c, h, p) {
                  var m, v = i.cubicExtrema,
                    g = i.cubicAt,
                    y = v(t, n, s, u, d);
                  for (h[0] = 1 / 0, h[1] = 1 / 0, p[0] = -1 / 0, p[1] = -1 / 0, m = 0; y > m; m++) {
                    var x = g(t, n, s, u, d[m]);
                    h[0] = r(x, h[0]), p[0] = a(x, p[0])
                  }
                  for (y = v(e, o, l, c, f), m = 0; y > m; m++) {
                    var _ = g(e, o, l, c, f[m]);
                    h[1] = r(_, h[1]), p[1] = a(_, p[1])
                  }
                  h[0] = r(t, h[0]), p[0] = a(t, p[0]), h[0] = r(u, h[0]), p[0] = a(u, p[0]), h[1] = r(e, h[1]), p[1] = a(e, p[1]), h[1] = r(c, h[1]), p[1] = a(c, p[1])
                }, n.fromQuadratic = function (t, e, n, o, s, l, u, c) {
                  var h = i.quadraticExtremum,
                    d = i.quadraticAt,
                    f = a(r(h(t, n, s), 1), 0),
                    p = a(r(h(e, o, l), 1), 0),
                    m = d(t, n, s, f),
                    v = d(e, o, l, p);
                  u[0] = r(t, s, m), u[1] = r(e, l, v), c[0] = a(t, s, m), c[1] = a(e, l, v)
                }, n.fromArc = function (t, i, n, r, a, d, f, p, m) {
                  var v = e.min,
                    g = e.max,
                    y = Math.abs(a - d);
                  if (1e-4 > y % h && y > 1e-4) return p[0] = t - n, p[1] = i - r, m[0] = t + n, void(m[1] = i + r);
                  if (l[0] = s(a) * n + t, l[1] = o(a) * r + i, u[0] = s(d) * n + t, u[1] = o(d) * r + i, v(p, l, u), g(m, l, u), a %= h, 0 > a && (a += h), d %= h, 0 > d && (d += h), a > d && !f ? d += h : d > a && f && (a += h), f) {
                    var x = d;
                    d = a, a = x
                  }
                  for (var _ = 0; d > _; _ += Math.PI / 2) _ > a && (c[0] = s(_) * n + t, c[1] = o(_) * r + i, v(p, c, p), g(m, c, m))
                }, n
              }), e("zrender/graphic/Style", [Ve], function () {
                function t(t, e, i) {
                  var n = null == e.x ? 0 : e.x,
                    r = null == e.x2 ? 1 : e.x2,
                    a = null == e.y ? 0 : e.y,
                    o = null == e.y2 ? 0 : e.y2;
                  e.global || (n = n * i.width + i.x, r = r * i.width + i.x, a = a * i[Le] + i.y, o = o * i[Le] + i.y);
                  var s = t.createLinearGradient(n, a, r, o);
                  return s
                }

                function e(t, e, i) {
                  var n = i.width,
                    r = i[Le],
                    a = Math.min(n, r),
                    o = null == e.x ? .5 : e.x,
                    s = null == e.y ? .5 : e.y,
                    l = null == e.r ? .5 : e.r;
                  e.global || (o = o * n + i.x, s = s * r + i.y, l *= a);
                  var u = t.createRadialGradient(o, s, 0, o, s, l);
                  return u
                }
                var a = [
                    [r, 0],
                    [n, 0],
                    [i, 0],
                    ["shadowColor", "#000"],
                    ["lineCap", "butt"],
                    ["lineJoin", "miter"],
                    ["miterLimit", 10]
                  ],
                  o = function (t) {
                    this.extendFrom(t)
                  };
                o[ye] = {
                  constructor: o,
                  fill: "#000000",
                  stroke: null,
                  opacity: 1,
                  lineDash: null,
                  lineDashOffset: 0,
                  shadowBlur: 0,
                  shadowOffsetX: 0,
                  shadowOffsetY: 0,
                  lineWidth: 1,
                  strokeNoScale: !1,
                  text: null,
                  textFill: "#000",
                  textStroke: null,
                  textPosition: "inside",
                  textPositionRect: null,
                  textOffset: null,
                  textBaseline: null,
                  textAlign: null,
                  textVerticalAlign: null,
                  textDistance: 5,
                  textShadowBlur: 0,
                  textShadowOffsetX: 0,
                  textShadowOffsetY: 0,
                  textTransform: !1,
                  textRotation: 0,
                  blend: null,
                  bind: function (t, e, i) {
                    for (var n = this, r = i && i.style, o = !r, s = 0; s < a[ve]; s++) {
                      var l = a[s],
                        u = l[0];
                      (o || n[u] !== r[u]) && (t[u] = n[u] || l[1])
                    }
                    if ((o || n.fill !== r.fill) && (t.fillStyle = n.fill), (o || n[d] !== r[d]) && (t.strokeStyle = n[d]), (o || n[xe] !== r[xe]) && (t.globalAlpha = null == n[xe] ? 1 : n[xe]), (o || n.blend !== r.blend) && (t.globalCompositeOperation = n.blend || "source-over"), this.hasStroke()) {
                      var c = n[f];
                      t[f] = c / (this.strokeNoScale && e && e.getLineScale ? e.getLineScale() : 1)
                    }
                  },
                  hasFill: function () {
                    var t = this.fill;
                    return null != t && "none" !== t
                  },
                  hasStroke: function () {
                    var t = this[d];
                    return null != t && "none" !== t && this[f] > 0
                  },
                  extendFrom: function (t, e) {
                    if (t) {
                      var i = this;
                      for (var n in t) !t.hasOwnProperty(n) || !e && i.hasOwnProperty(n) || (i[n] = t[n])
                    }
                  },
                  set: function (t, e) {
                    typeof t === ue ? this[t] = e : this.extendFrom(t, !0)
                  },
                  clone: function () {
                    var t = new this.constructor;
                    return t.extendFrom(this, !0), t
                  },
                  getGradient: function (i, n, r) {
                    for (var a = "radial" === n.type ? e : t, o = a(i, n, r), s = n[A], l = 0; l < s[ve]; l++) o.addColorStop(s[l][O], s[l].color);
                    return o
                  }
                };
                for (var s = o[ye], l = 0; l < a[ve]; l++) {
                  var u = a[l];
                  u[0] in s || (s[u[0]] = u[1])
                }
                return o.getGradient = s.getGradient, o
              }), e("zrender/Element", [Ve, "./core/guid", "./mixin/Eventful", "./mixin/Transformable", "./mixin/Animatable", "./core/util"], function (t) {
                var e = t("./core/guid"),
                  i = t("./mixin/Eventful"),
                  n = t("./mixin/Transformable"),
                  r = t("./mixin/Animatable"),
                  a = t("./core/util"),
                  o = function (t) {
                    n.call(this, t), i.call(this, t), r.call(this, t), this.id = t.id || e()
                  };
                return o[ye] = {
                  type: "element",
                  name: "",
                  __zr: null,
                  ignore: !1,
                  clipPath: null,
                  drift: function (t, e) {
                    switch (this.draggable) {
                      case "horizontal":
                        e = 0;
                        break;
                      case "vertical":
                        t = 0
                    }
                    var i = this[u];
                    i || (i = this[u] = [1, 0, 0, 1, 0, 0]), i[4] += t, i[5] += e, this.decomposeTransform(), this.dirty(!1)
                  },
                  beforeUpdate: function () {},
                  afterUpdate: function () {},
                  update: function () {
                    this.updateTransform()
                  },
                  traverse: function () {},
                  attrKV: function (t, e) {
                    if (t === be || "scale" === t || "origin" === t) {
                      if (e) {
                        var i = this[t];
                        i || (i = this[t] = []), i[0] = e[0], i[1] = e[1]
                      }
                    } else this[t] = e
                  },
                  hide: function () {
                    this[k] = !0, this.__zr && this.__zr.refresh()
                  },
                  show: function () {
                    this[k] = !1, this.__zr && this.__zr.refresh()
                  },
                  attr: function (t, e) {
                    if (typeof t === ue) this.attrKV(t, e);
                    else if (a[ie](t))
                      for (var i in t) t.hasOwnProperty(i) && this.attrKV(i, t[i]);
                    return this.dirty(!1), this
                  },
                  setClipPath: function (t) {
                    var e = this.__zr;
                    e && t.addSelfToZr(e), this.clipPath && this.clipPath !== t && this.removeClipPath(), this.clipPath = t, t.__zr = e, t.__clipTarget = this, this.dirty(!1)
                  },
                  removeClipPath: function () {
                    var t = this.clipPath;
                    t && (t.__zr && t.removeSelfFromZr(t.__zr), t.__zr = null, t.__clipTarget = null, this.clipPath = null, this.dirty(!1))
                  },
                  addSelfToZr: function (t) {
                    this.__zr = t;
                    var e = this.animators;
                    if (e)
                      for (var i = 0; i < e[ve]; i++) t[H].addAnimator(e[i]);
                    this.clipPath && this.clipPath.addSelfToZr(t)
                  },
                  removeSelfFromZr: function (t) {
                    this.__zr = null;
                    var e = this.animators;
                    if (e)
                      for (var i = 0; i < e[ve]; i++) t[H].removeAnimator(e[i]);
                    this.clipPath && this.clipPath.removeSelfFromZr(t)
                  }
                }, a.mixin(o, r), a.mixin(o, n), a.mixin(o, i), o
              }), e("echarts/model/mixin/makeStyleMapper", [Ve, Fe], function (t) {
                var e = t(Fe);
                return function (t) {
                  for (var i = 0; i < t[ve]; i++) t[i][1] || (t[i][1] = t[i][0]);
                  return function (i, n) {
                    for (var r = {}, a = 0; a < t[ve]; a++) {
                      var o = t[a][1];
                      if (!(i && e[ce](i, o) >= 0 || n && e[ce](n, o) < 0)) {
                        var s = this[R](o);
                        null != s && (r[t[a][0]] = s)
                      }
                    }
                    return r
                  }
                }
              }), e("echarts/coord/cartesian/Cartesian", [Ve, Fe], function (t) {
                function e(t) {
                  return this._axes[t]
                }
                var i = t(Fe),
                  n = function (t) {
                    this._axes = {}, this._dimList = [], this.name = t || ""
                  };
                return n[ye] = {
                  constructor: n,
                  type: "cartesian",
                  getAxis: function (t) {
                    return this._axes[t]
                  },
                  getAxes: function () {
                    return i.map(this._dimList, e, this)
                  },
                  getAxesByScale: function (t) {
                    return t = t[z](), i[de](this.getAxes(), function (e) {
                      return e.scale.type === t
                    })
                  },
                  addAxis: function (t) {
                    var e = t.dim;
                    this._axes[e] = t, this._dimList.push(e)
                  },
                  dataToCoord: function (t) {
                    return this._dataCoordConvert(t, J)
                  },
                  coordToData: function (t) {
                    return this._dataCoordConvert(t, "coordToData")
                  },
                  _dataCoordConvert: function (t, e) {
                    for (var i = this._dimList, n = t instanceof Array ? [] : {}, r = 0; r < i[ve]; r++) {
                      var a = i[r],
                        o = this._axes[a];
                      n[a] = o[e](t[a])
                    }
                    return n
                  }
                }, n
              }), e("zrender/core/LRU", [Ve], function () {
                var t = function () {
                    this.head = null, this.tail = null, this._len = 0
                  },
                  e = t[ye];
                e.insert = function (t) {
                  var e = new i(t);
                  return this.insertEntry(e), e
                }, e.insertEntry = function (t) {
                  this.head ? (this.tail.next = t, t.prev = this.tail, t.next = null, this.tail = t) : this.head = this.tail = t, this._len++
                }, e[W] = function (t) {
                  var e = t.prev,
                    i = t.next;
                  e ? e.next = i : this.head = i, i ? i.prev = e : this.tail = e, t.next = t.prev = null, this._len--
                }, e.len = function () {
                  return this._len
                }, e.clear = function () {
                  this.head = this.tail = null, this._len = 0
                };
                var i = function (t) {
                    this.value = t, this.next, this.prev
                  },
                  n = function (e) {
                    this._list = new t, this._map = {}, this._maxSize = e || 10, this._lastRemovedEntry = null
                  },
                  r = n[ye];
                return r.put = function (t, e) {
                  var n = this._list,
                    r = this._map,
                    a = null;
                  if (null == r[t]) {
                    var o = n.len(),
                      s = this._lastRemovedEntry;
                    if (o >= this._maxSize && o > 0) {
                      var l = n.head;
                      n[W](l), delete r[l.key], a = l.value, this._lastRemovedEntry = l
                    }
                    s ? s.value = e : s = new i(e), s.key = t, n.insertEntry(s), r[t] = s
                  }
                  return a
                }, r.get = function (t) {
                  var e = this._map[t],
                    i = this._list;
                  return null != e ? (e !== i.tail && (i[W](e), i.insertEntry(e)), e.value) : void 0
                }, r.clear = function () {
                  this._list.clear(), this._map = {}
                }, n
              }), e("zrender/core/guid", [], function () {
                var t = 2311;
                return function () {
                  return t++
                }
              }), e("zrender/mixin/Animatable", [Ve, "../animation/Animator", a, "../core/log"], function (t) {
                var e = t("../animation/Animator"),
                  i = t(a),
                  n = i[v],
                  r = i.isFunction,
                  o = i[ie],
                  s = t("../core/log"),
                  l = function () {
                    this.animators = []
                  };
                return l[ye] = {
                  constructor: l,
                  animate: function (t, n) {
                    var r, a = !1,
                      o = this,
                      l = this.__zr;
                    if (t) {
                      var u = t.split("."),
                        c = o;
                      a = "shape" === u[0];
                      for (var h = 0, d = u[ve]; d > h; h++) c && (c = c[u[h]]);
                      c && (r = c)
                    } else r = o;
                    if (!r) return void s('Property "' + t + '" is not existed in element ' + o.id);
                    var f = o.animators,
                      p = new e(r, n);
                    return p.during(function () {
                      o.dirty(a)
                    }).done(function () {
                      f[M](i[ce](f, p), 1)
                    }), f.push(p), l && l[H].addAnimator(p), p
                  },
                  stopAnimation: function (t) {
                    for (var e = this.animators, i = e[ve], n = 0; i > n; n++) e[n].stop(t);
                    return e[ve] = 0, this
                  },
                  animateTo: function (t, e, i, a, o) {
                    function s() {
                      u--, u || o && o()
                    }
                    n(i) ? (o = a, a = i, i = 0) : r(a) ? (o = a, a = "linear", i = 0) : r(i) ? (o = i, i = 0) : r(e) ? (o = e, e = 500) : e || (e = 500), this.stopAnimation(), this._animateToShallow("", this, t, e, i, a, o);
                    var l = this.animators.slice(),
                      u = l[ve];
                    u || o && o();
                    for (var c = 0; c < l[ve]; c++) l[c].done(s).start(a)
                  },
                  _animateToShallow: function (t, e, n, r, a) {
                    var s = {},
                      l = 0;
                    for (var u in n)
                      if (n.hasOwnProperty(u))
                        if (null != e[u]) o(n[u]) && !i.isArrayLike(n[u]) ? this._animateToShallow(t ? t + "." + u : u, e[u], n[u], r, a) : (s[u] = n[u], l++);
                        else if (null != n[u])
                      if (t) {
                        var c = {};
                        c[t] = {}, c[t][u] = n[u], this.attr(c)
                      } else this.attr(u, n[u]);
                    return l > 0 && this.animate(t, !1).when(null == r ? 500 : r, s).delay(a || 0), this
                  }
                }, l
              }), e("echarts/coord/cartesian/AxisModel", [Ve, "../../model/Component", Fe, "../axisModelCreator", "../axisModelCommonMixin"], function (t) {
                function e(t, e) {
                  return e.type || (e.data ? re : "value")
                }
                var i = t("../../model/Component"),
                  n = t(Fe),
                  r = t("../axisModelCreator"),
                  a = i[ge]({
                    type: "cartesian2dAxis",
                    axis: null,
                    init: function () {
                      a.superApply(this, "init", arguments), this.resetRange()
                    },
                    mergeOption: function () {
                      a.superApply(this, "mergeOption", arguments), this.resetRange()
                    },
                    restoreData: function () {
                      a.superApply(this, "restoreData", arguments), this.resetRange()
                    },
                    getCoordSysModel: function () {
                      return this[pe].queryComponents({
                        mainType: "grid",
                        index: this[c].gridIndex,
                        id: this[c].gridId
                      })[0]
                    }
                  });
                n.merge(a[ye], t("../axisModelCommonMixin"));
                var o = {
                  offset: 0
                };
                return r("x", a, e, o), r("y", a, e, o), a
              }), e("zrender/core/log", [Ve, "../config"], function (t) {
                var e = t("../config");
                return function () {
                  if (0 !== e.debugMode)
                    if (1 == e.debugMode)
                      for (var t in arguments) throw new Error(arguments[t]);
                    else if (e.debugMode > 1)
                    for (var t in arguments) console.log(arguments[t])
                }
              }), e("zrender/animation/Animator", [Ve, "./Clip", "../tool/color", a], function (t) {
                function e(t, e) {
                  return t[e]
                }

                function i(t, e, i) {
                  t[e] = i
                }

                function n(t, e, i) {
                  return (e - t) * i + t
                }

                function r(t, e, i) {
                  return i > .5 ? e : t
                }

                function o(t, e, i, r, a) {
                  var o = t[ve];
                  if (1 == a)
                    for (var s = 0; o > s; s++) r[s] = n(t[s], e[s], i);
                  else
                    for (var l = o && t[0][ve], s = 0; o > s; s++)
                      for (var u = 0; l > u; u++) r[s][u] = n(t[s][u], e[s][u], i)
                }

                function s(t, e, i) {
                  var n = t[ve],
                    r = e[ve];
                  if (n !== r) {
                    var a = n > r;
                    if (a) t[ve] = r;
                    else
                      for (var o = n; r > o; o++) t.push(1 === i ? e[o] : x.call(e[o]))
                  }
                  for (var s = t[0] && t[0][ve], o = 0; o < t[ve]; o++)
                    if (1 === i) isNaN(t[o]) && (t[o] = e[o]);
                    else
                      for (var l = 0; s > l; l++) isNaN(t[o][l]) && (t[o][l] = e[o][l])
                }

                function l(t, e, i) {
                  if (t === e) return !0;
                  var n = t[ve];
                  if (n !== e[ve]) return !1;
                  if (1 === i) {
                    for (var r = 0; n > r; r++)
                      if (t[r] !== e[r]) return !1
                  } else
                    for (var a = t[0][ve], r = 0; n > r; r++)
                      for (var o = 0; a > o; o++)
                        if (t[r][o] !== e[r][o]) return !1;
                  return !0
                }

                function u(t, e, i, n, r, a, o, s, l) {
                  var u = t[ve];
                  if (1 == l)
                    for (var h = 0; u > h; h++) s[h] = c(t[h], e[h], i[h], n[h], r, a, o);
                  else
                    for (var d = t[0][ve], h = 0; u > h; h++)
                      for (var f = 0; d > f; f++) s[h][f] = c(t[h][f], e[h][f], i[h][f], n[h][f], r, a, o)
                }

                function c(t, e, i, n, r, a, o) {
                  var s = .5 * (i - t),
                    l = .5 * (n - e);
                  return (2 * (e - i) + s + l) * o + (-3 * (e - i) - 2 * s - l) * a + s * r + e
                }

                function h(t) {
                  if (y(t)) {
                    var e = t[ve];
                    if (y(t[0])) {
                      for (var i = [], n = 0; e > n; n++) i.push(x.call(t[n]));
                      return i
                    }
                    return x.call(t)
                  }
                  return t
                }

                function d(t) {
                  return t[0] = Math.floor(t[0]), t[1] = Math.floor(t[1]), t[2] = Math.floor(t[2]), "rgba(" + t.join(",") + ")"
                }

                function f(t) {
                  var e = t[t[ve] - 1].value;
                  return y(e && e[0]) ? 2 : 1
                }

                function p(t, e, i, a, h) {
                  var p = t._getter,
                    g = t._setter,
                    x = "spline" === e,
                    _ = a[ve];
                  if (_) {
                    var b, w = a[0].value,
                      M = y(w),
                      T = !1,
                      S = !1,
                      P = M ? f(a) : 0;
                    a.sort(function (t, e) {
                      return t.time - e.time
                    }), b = a[_ - 1].time;
                    for (var C = [], A = [], L = a[0].value, k = !0, I = 0; _ > I; I++) {
                      C.push(a[I].time / b);
                      var z = a[I].value;
                      if (M && l(z, L, P) || !M && z === L || (k = !1), L = z, typeof z == ue) {
                        var D = v.parse(z);
                        D ? (z = D, T = !0) : S = !0
                      }
                      A.push(z)
                    }
                    if (!k) {
                      for (var O = A[_ - 1], I = 0; _ - 1 > I; I++) M ? s(A[I], O, P) : !isNaN(A[I]) || isNaN(O) || S || T || (A[I] = O);
                      M && s(p(t._target, h), O, P);
                      var E, R, B, N, F, V, H = 0,
                        G = 0;
                      if (T) var q = [0, 0, 0, 0];
                      var W = function (t, e) {
                          var i;
                          if (0 > e) i = 0;
                          else if (G > e) {
                            for (E = Math.min(H + 1, _ - 1), i = E; i >= 0 && !(C[i] <= e); i--);
                            i = Math.min(i, _ - 2)
                          } else {
                            for (i = H; _ > i && !(C[i] > e); i++);
                            i = Math.min(i - 1, _ - 2)
                          }
                          H = i, G = e;
                          var a = C[i + 1] - C[i];
                          if (0 !== a)
                            if (R = (e - C[i]) / a, x)
                              if (N = A[i], B = A[0 === i ? i : i - 1], F = A[i > _ - 2 ? _ - 1 : i + 1], V = A[i > _ - 3 ? _ - 1 : i + 2], M) u(B, N, F, V, R, R * R, R * R * R, p(t, h), P);
                              else {
                                var s;
                                if (T) s = u(B, N, F, V, R, R * R, R * R * R, q, 1), s = d(q);
                                else {
                                  if (S) return r(N, F, R);
                                  s = c(B, N, F, V, R, R * R, R * R * R)
                                }
                                g(t, h, s)
                              }
                          else if (M) o(A[i], A[i + 1], R, p(t, h), P);
                          else {
                            var s;
                            if (T) o(A[i], A[i + 1], R, q, 1), s = d(q);
                            else {
                              if (S) return r(A[i], A[i + 1], R);
                              s = n(A[i], A[i + 1], R)
                            }
                            g(t, h, s)
                          }
                        },
                        U = new m({
                          target: t._target,
                          life: b,
                          loop: t._loop,
                          delay: t._delay,
                          onframe: W,
                          ondestroy: i
                        });
                      return e && "spline" !== e && (U.easing = e), U
                    }
                  }
                }
                var m = t("./Clip"),
                  v = t("../tool/color"),
                  g = t(a),
                  y = g.isArrayLike,
                  x = Array[ye].slice,
                  _ = function (t, n, r, a) {
                    this._tracks = {}, this._target = t, this._loop = n || !1, this._getter = r || e, this._setter = a || i, this._clipCount = 0, this._delay = 0, this._doneList = [], this._onframeList = [], this._clipList = []
                  };
                return _[ye] = {
                  when: function (t, e) {
                    var i = this._tracks;
                    for (var n in e)
                      if (e.hasOwnProperty(n)) {
                        if (!i[n]) {
                          i[n] = [];
                          var r = this._getter(this._target, n);
                          if (null == r) continue;
                          0 !== t && i[n].push({
                            time: 0,
                            value: h(r)
                          })
                        }
                        i[n].push({
                          time: t,
                          value: e[n]
                        })
                      } return this
                  },
                  during: function (t) {
                    return this._onframeList.push(t), this
                  },
                  pause: function () {
                    for (var t = 0; t < this._clipList[ve]; t++) this._clipList[t].pause();
                    this._paused = !0
                  },
                  resume: function () {
                    for (var t = 0; t < this._clipList[ve]; t++) this._clipList[t].resume();
                    this._paused = !1
                  },
                  isPaused: function () {
                    return !!this._paused
                  },
                  _doneCallback: function () {
                    this._tracks = {}, this._clipList[ve] = 0;
                    for (var t = this._doneList, e = t[ve], i = 0; e > i; i++) t[i].call(this)
                  },
                  start: function (t) {
                    var e, i = this,
                      n = 0,
                      r = function () {
                        n--, n || i._doneCallback()
                      };
                    for (var a in this._tracks)
                      if (this._tracks.hasOwnProperty(a)) {
                        var o = p(this, t, r, this._tracks[a], a);
                        o && (this._clipList.push(o), n++, this[H] && this[H].addClip(o), e = o)
                      } if (e) {
                      var s = e.onframe;
                      e.onframe = function (t, e) {
                        s(t, e);
                        for (var n = 0; n < i._onframeList[ve]; n++) i._onframeList[n](t, e)
                      }
                    }
                    return n || this._doneCallback(), this
                  },
                  stop: function (t) {
                    for (var e = this._clipList, i = this[H], n = 0; n < e[ve]; n++) {
                      var r = e[n];
                      t && r.onframe(this._target, 1), i && i.removeClip(r)
                    }
                    e[ve] = 0
                  },
                  delay: function (t) {
                    return this._delay = t, this
                  },
                  done: function (t) {
                    return t && this._doneList.push(t), this
                  },
                  getClips: function () {
                    return this._clipList
                  }
                }, _
              }), e("echarts/coord/axisModelCreator", [Ve, "./axisDefault", Fe, "../model/Component", "../util/layout"], function (t) {
                var e = t("./axisDefault"),
                  i = t(Fe),
                  n = t("../model/Component"),
                  r = t("../util/layout"),
                  a = ["value", re, "time", "log"];
                return function (t, o, s, l) {
                  i.each(a, function (n) {
                    o[ge]({
                      type: t + "Axis." + n,
                      mergeDefaultAndTheme: function (e, a) {
                        var o = this.layoutMode,
                          l = o ? r.getLayoutParams(e) : {},
                          u = a.getTheme();
                        i.merge(e, u.get(n + "Axis")), i.merge(e, this.getDefaultOption()), e.type = s(t, e), o && r.mergeLayoutParam(e, l, o)
                      },
                      defaultOption: i.mergeAll([{}, e[n + "Axis"], l], !0)
                    })
                  }), n.registerSubTypeDefaulter(t + "Axis", i.curry(s, t))
                }
              }), e("echarts/model/mixin/boxLayout", [Ve], function () {
                return {
                  getBoxLayoutParams: function () {
                    return {
                      left: this.get("left"),
                      top: this.get("top"),
                      right: this.get("right"),
                      bottom: this.get(we),
                      width: this.get("width"),
                      height: this.get(Le)
                    }
                  }
                }
              }), e("echarts/coord/axisModelCommonMixin", [Ve, Fe, "./axisHelper"], function (t) {
                function e(t) {
                  return i[ie](t) && null != t.value ? t.value : t + ""
                }
                var i = t(Fe),
                  n = t("./axisHelper");
                return {
                  getFormattedLabels: function () {
                    return n.getFormattedLabels(this.axis, this.get("axisLabel.formatter"))
                  },
                  getCategories: function () {
                    return this.get("type") === re && i.map(this.get("data"), e)
                  },
                  getMin: function (t) {
                    var e = this[c],
                      n = t || null == e.rangeStart ? e.min : e.rangeStart;
                    return this.axis && null != n && "dataMin" !== n && !i.eqNaN(n) && (n = this.axis.scale.parse(n)), n
                  },
                  getMax: function (t) {
                    var e = this[c],
                      n = t || null == e.rangeEnd ? e.max : e.rangeEnd;
                    return this.axis && null != n && "dataMax" !== n && !i.eqNaN(n) && (n = this.axis.scale.parse(n)), n
                  },
                  getNeedCrossZero: function () {
                    var t = this[c];
                    return null != t.rangeStart || null != t.rangeEnd ? !1 : !t.scale
                  },
                  getCoordSysModel: i.noop,
                  setRange: function (t, e) {
                    this[c].rangeStart = t, this[c].rangeEnd = e
                  },
                  resetRange: function () {
                    this[c].rangeStart = this[c].rangeEnd = null
                  }
                }
              }), e("echarts/util/component", [Ve, Fe, "./clazz"], function (t) {
                var e = t(Fe),
                  i = t("./clazz"),
                  n = i.parseClassType,
                  r = 0,
                  a = {},
                  o = "_";
                return a.getUID = function (t) {
                  return [t || "", r++, Math.random()].join(o)
                }, a.enableSubTypeDefaulter = function (t) {
                  var e = {};
                  return t.registerSubTypeDefaulter = function (t, i) {
                    t = n(t), e[t.main] = i
                  }, t.determineSubType = function (i, r) {
                    var a = r.type;
                    if (!a) {
                      var o = n(i).main;
                      t.hasSubTypes(i) && e[o] && (a = e[o](r))
                    }
                    return a
                  }, t
                }, a.enableTopologicalTravel = function (t, i) {
                  function n(t) {
                    var n = {},
                      o = [];
                    return e.each(t, function (s) {
                      var l = r(n, s),
                        u = l.originalDeps = i(s),
                        c = a(u, t);
                      l.entryCount = c[ve], 0 === l.entryCount && o.push(s), e.each(c, function (t) {
                        e[ce](l.predecessor, t) < 0 && l.predecessor.push(t);
                        var i = r(n, t);
                        e[ce](i.successor, t) < 0 && i.successor.push(s)
                      })
                    }), {
                      graph: n,
                      noEntryList: o
                    }
                  }

                  function r(t, e) {
                    return t[e] || (t[e] = {
                      predecessor: [],
                      successor: []
                    }), t[e]
                  }

                  function a(t, i) {
                    var n = [];
                    return e.each(t, function (t) {
                      e[ce](i, t) >= 0 && n.push(t)
                    }), n
                  }
                  t.topologicalTravel = function (t, i, r, a) {
                    function o(t) {
                      u[t].entryCount--, 0 === u[t].entryCount && c.push(t)
                    }

                    function s(t) {
                      h[t] = !0, o(t)
                    }
                    if (t[ve]) {
                      var l = n(i),
                        u = l.graph,
                        c = l.noEntryList,
                        h = {};
                      for (e.each(t, function (t) {
                          h[t] = !0
                        }); c[ve];) {
                        var d = c.pop(),
                          f = u[d],
                          p = !!h[d];
                        p && (r.call(a, d, f.originalDeps.slice()), delete h[d]), e.each(f.successor, p ? s : o)
                      }
                      e.each(h, function () {
                        throw new Error("Circle dependency may exists")
                      })
                    }
                  }
                }, a
              }), e("zrender/animation/Clip", [Ve, "./easing"], function (t) {
                function e(t) {
                  this._target = t[Ce], this._life = t.life || 1e3, this._delay = t.delay || 0, this._initialized = !1, this.loop = null == t.loop ? !1 : t.loop, this.gap = t.gap || 0, this.easing = t.easing || "Linear", this.onframe = t.onframe, this.ondestroy = t.ondestroy, this.onrestart = t.onrestart, this._pausedTime = 0, this._paused = !1
                }
                var i = t("./easing");
                return e[ye] = {
                  constructor: e,
                  step: function (t, e) {
                    if (this._initialized || (this._startTime = t + this._delay, this._initialized = !0), this._paused) return void(this._pausedTime += e);
                    var n = (t - this._startTime - this._pausedTime) / this._life;
                    if (!(0 > n)) {
                      n = Math.min(n, 1);
                      var r = this.easing,
                        a = typeof r == ue ? i[r] : r,
                        o = typeof a === oe ? a(n) : n;
                      return this.fire("frame", o), 1 == n ? this.loop ? (this.restart(t), "restart") : (this._needsRemove = !0, "destroy") : null
                    }
                  },
                  restart: function (t) {
                    var e = (t - this._startTime - this._pausedTime) % this._life;
                    this._startTime = t - e + this.gap, this._pausedTime = 0, this._needsRemove = !1
                  },
                  fire: function (t, e) {
                    t = "on" + t, this[t] && this[t](this._target, e)
                  },
                  pause: function () {
                    this._paused = !0
                  },
                  resume: function () {
                    this._paused = !1
                  }
                }, e
              }), e("zrender/animation/easing", [], function () {
                var t = {
                  linear: function (t) {
                    return t
                  },
                  quadraticIn: function (t) {
                    return t * t
                  },
                  quadraticOut: function (t) {
                    return t * (2 - t)
                  },
                  quadraticInOut: function (t) {
                    return (t *= 2) < 1 ? .5 * t * t : -.5 * (--t * (t - 2) - 1)
                  },
                  cubicIn: function (t) {
                    return t * t * t
                  },
                  cubicOut: function (t) {
                    return --t * t * t + 1
                  },
                  cubicInOut: function (t) {
                    return (t *= 2) < 1 ? .5 * t * t * t : .5 * ((t -= 2) * t * t + 2)
                  },
                  quarticIn: function (t) {
                    return t * t * t * t
                  },
                  quarticOut: function (t) {
                    return 1 - --t * t * t * t
                  },
                  quarticInOut: function (t) {
                    return (t *= 2) < 1 ? .5 * t * t * t * t : -.5 * ((t -= 2) * t * t * t - 2)
                  },
                  quinticIn: function (t) {
                    return t * t * t * t * t
                  },
                  quinticOut: function (t) {
                    return --t * t * t * t * t + 1
                  },
                  quinticInOut: function (t) {
                    return (t *= 2) < 1 ? .5 * t * t * t * t * t : .5 * ((t -= 2) * t * t * t * t + 2)
                  },
                  sinusoidalIn: function (t) {
                    return 1 - Math.cos(t * Math.PI / 2)
                  },
                  sinusoidalOut: function (t) {
                    return Math.sin(t * Math.PI / 2)
                  },
                  sinusoidalInOut: function (t) {
                    return .5 * (1 - Math.cos(Math.PI * t))
                  },
                  exponentialIn: function (t) {
                    return 0 === t ? 0 : Math.pow(1024, t - 1)
                  },
                  exponentialOut: function (t) {
                    return 1 === t ? 1 : 1 - Math.pow(2, -10 * t)
                  },
                  exponentialInOut: function (t) {
                    return 0 === t ? 0 : 1 === t ? 1 : (t *= 2) < 1 ? .5 * Math.pow(1024, t - 1) : .5 * (-Math.pow(2, -10 * (t - 1)) + 2)
                  },
                  circularIn: function (t) {
                    return 1 - Math.sqrt(1 - t * t)
                  },
                  circularOut: function (t) {
                    return Math.sqrt(1 - --t * t)
                  },
                  circularInOut: function (t) {
                    return (t *= 2) < 1 ? -.5 * (Math.sqrt(1 - t * t) - 1) : .5 * (Math.sqrt(1 - (t -= 2) * t) + 1)
                  },
                  elasticIn: function (t) {
                    var e, i = .1,
                      n = .4;
                    return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1, e = n / 4) : e = n * Math.asin(1 / i) / (2 * Math.PI), -(i * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / n)))
                  },
                  elasticOut: function (t) {
                    var e, i = .1,
                      n = .4;
                    return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1, e = n / 4) : e = n * Math.asin(1 / i) / (2 * Math.PI), i * Math.pow(2, -10 * t) * Math.sin(2 * (t - e) * Math.PI / n) + 1)
                  },
                  elasticInOut: function (t) {
                    var e, i = .1,
                      n = .4;
                    return 0 === t ? 0 : 1 === t ? 1 : (!i || 1 > i ? (i = 1, e = n / 4) : e = n * Math.asin(1 / i) / (2 * Math.PI), (t *= 2) < 1 ? -.5 * i * Math.pow(2, 10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / n) : i * Math.pow(2, -10 * (t -= 1)) * Math.sin(2 * (t - e) * Math.PI / n) * .5 + 1)
                  },
                  backIn: function (t) {
                    var e = 1.70158;
                    return t * t * ((e + 1) * t - e)
                  },
                  backOut: function (t) {
                    var e = 1.70158;
                    return --t * t * ((e + 1) * t + e) + 1
                  },
                  backInOut: function (t) {
                    var e = 2.5949095;
                    return (t *= 2) < 1 ? .5 * t * t * ((e + 1) * t - e) : .5 * ((t -= 2) * t * ((e + 1) * t + e) + 2)
                  },
                  bounceIn: function (e) {
                    return 1 - t.bounceOut(1 - e)
                  },
                  bounceOut: function (t) {
                    return 1 / 2.75 > t ? 7.5625 * t * t : 2 / 2.75 > t ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : 2.5 / 2.75 > t ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375
                  },
                  bounceInOut: function (e) {
                    return .5 > e ? .5 * t.bounceIn(2 * e) : .5 * t.bounceOut(2 * e - 1) + .5
                  }
                };
                return t
              }), e("zrender/contain/util", [Ve], function () {
                var t = 2 * Math.PI;
                return {
                  normalizeRadian: function (e) {
                    return e %= t, 0 > e && (e += t), e
                  }
                }
              }), e("zrender/contain/windingLine", [], function () {
                return function (t, e, i, n, r, a) {
                  if (a > e && a > n || e > a && n > a) return 0;
                  if (n === e) return 0;
                  var o = e > n ? 1 : -1,
                    s = (a - e) / (n - e);
                  (1 === s || 0 === s) && (o = e > n ? .5 : -.5);
                  var l = s * (i - t) + t;
                  return l > r ? o : 0
                }
              }), e("zrender/contain/line", [], function () {
                return {
                  containStroke: function (t, e, i, n, r, a, o) {
                    if (0 === r) return !1;
                    var s = r,
                      l = 0,
                      u = t;
                    if (o > e + s && o > n + s || e - s > o && n - s > o || a > t + s && a > i + s || t - s > a && i - s > a) return !1;
                    if (t === i) return Math.abs(a - t) <= s / 2;
                    l = (e - n) / (t - i), u = (t * n - i * e) / (t - i);
                    var c = l * a - o + u,
                      h = c * c / (l * l + 1);
                    return s / 2 * s / 2 >= h
                  }
                }
              }), e("zrender/contain/cubic", [Ve, "../core/curve"], function (t) {
                var e = t("../core/curve");
                return {
                  containStroke: function (t, i, n, r, a, o, s, l, u, c, h) {
                    if (0 === u) return !1;
                    var d = u;
                    if (h > i + d && h > r + d && h > o + d && h > l + d || i - d > h && r - d > h && o - d > h && l - d > h || c > t + d && c > n + d && c > a + d && c > s + d || t - d > c && n - d > c && a - d > c && s - d > c) return !1;
                    var f = e.cubicProjectPoint(t, i, n, r, a, o, s, l, c, h, null);
                    return d / 2 >= f
                  }
                }
              }), e("zrender/contain/quadratic", [Ve, "../core/curve"], function (t) {
                var e = t("../core/curve");
                return {
                  containStroke: function (t, i, n, r, a, o, s, l, u) {
                    if (0 === s) return !1;
                    var c = s;
                    if (u > i + c && u > r + c && u > o + c || i - c > u && r - c > u && o - c > u || l > t + c && l > n + c && l > a + c || t - c > l && n - c > l && a - c > l) return !1;
                    var h = e.quadraticProjectPoint(t, i, n, r, a, o, l, u, null);
                    return c / 2 >= h
                  }
                }
              }), e("zrender/contain/arc", [Ve, "./util"], function (t) {
                var e = t("./util").normalizeRadian,
                  i = 2 * Math.PI;
                return {
                  containStroke: function (t, n, r, a, o, s, l, u, c) {
                    if (0 === l) return !1;
                    var h = l;
                    u -= t, c -= n;
                    var d = Math.sqrt(u * u + c * c);
                    if (d - h > r || r > d + h) return !1;
                    if (Math.abs(a - o) % i < 1e-4) return !0;
                    if (s) {
                      var f = a;
                      a = e(o), o = e(f)
                    } else a = e(a), o = e(o);
                    a > o && (o += i);
                    var p = Math.atan2(c, u);
                    return 0 > p && (p += i), p >= a && o >= p || p + i >= a && o >= p + i
                  }
                }
              }), e("zrender/graphic/helper/poly", [Ve, "./smoothSpline", "./smoothBezier"], function (t) {
                var e = t("./smoothSpline"),
                  i = t("./smoothBezier");
                return {
                  buildPath: function (t, n, r) {
                    var a = n.points,
                      o = n.smooth;
                    if (a && a[ve] >= 2) {
                      if (o && "spline" !== o) {
                        var s = i(a, o, r, n.smoothConstraint);
                        t[l](a[0][0], a[0][1]);
                        for (var u = a[ve], c = 0;
                          (r ? u : u - 1) > c; c++) {
                          var h = s[2 * c],
                            d = s[2 * c + 1],
                            f = a[(c + 1) % u];
                          t.bezierCurveTo(h[0], h[1], d[0], d[1], f[0], f[1])
                        }
                      } else {
                        "spline" === o && (a = e(a, r)), t[l](a[0][0], a[0][1]);
                        for (var c = 1, p = a[ve]; p > c; c++) t.lineTo(a[c][0], a[c][1])
                      }
                      r && t.closePath()
                    }
                  }
                }
              }), e("zrender/Handler", [Ve, "./core/util", "./mixin/Draggable", "./mixin/Eventful"], function (t) {
                function e(t, e, i) {
                  return {
                    type: t,
                    event: i,
                    target: e[Ce],
                    topTarget: e.topTarget,
                    cancelBubble: !1,
                    offsetX: i.zrX,
                    offsetY: i.zrY,
                    gestureEvent: i.gestureEvent,
                    pinchX: i.pinchX,
                    pinchY: i.pinchY,
                    pinchScale: i.pinchScale,
                    wheelDelta: i.zrDelta,
                    zrByTouch: i.zrByTouch
                  }
                }

                function i() {}

                function n(t, e, i) {
                  if (t[t.rectHover ? "rectContain" : "contain"](e, i)) {
                    for (var n, r = t; r;) {
                      if (r.clipPath && !r.clipPath.contain(e, i)) return !1;
                      r[Ae] && (n = !0), r = r[N]
                    }
                    return n ? s : !0
                  }
                  return !1
                }
                var r = t("./core/util"),
                  a = t("./mixin/Draggable"),
                  o = t("./mixin/Eventful"),
                  s = Ae;
                i[ye][T] = function () {};
                var l = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"],
                  u = function (t, e, n, s) {
                    o.call(this), this.storage = t, this.painter = e, this.painterRoot = s, n = n || new i, this.proxy = n, n.handler = this, this._hovered = {}, this._lastTouchMoment, this._lastX, this._lastY, a.call(this), r.each(l, function (t) {
                      n.on && n.on(t, this[t], this)
                    }, this)
                  };
                return u[ye] = {
                  constructor: u,
                  mousemove: function (t) {
                    var e = t.zrX,
                      i = t.zrY,
                      n = this._hovered,
                      r = this._hovered = this.findHover(e, i),
                      a = r[Ce],
                      o = n[Ce],
                      s = this.proxy;
                    s.setCursor && s.setCursor(a ? a.cursor : "default"), o && a !== o && o.__zr && this.dispatchToElement(n, "mouseout", t), this.dispatchToElement(r, "mousemove", t), a && a !== o && this.dispatchToElement(r, "mouseover", t)
                  },
                  mouseout: function (t) {
                    this.dispatchToElement(this._hovered, "mouseout", t);
                    var e, i = t.toElement || t.relatedTarget;
                    do i = i && i.parentNode; while (i && 9 != i.nodeType && !(e = i === this.painterRoot));
                    !e && this[S]("globalout", {
                      event: t
                    })
                  },
                  resize: function () {
                    this._hovered = {}
                  },
                  dispatch: function (t, e) {
                    var i = this[t];
                    i && i.call(this, e)
                  },
                  dispose: function () {
                    this.proxy[T](), this.storage = this.proxy = this.painter = null
                  },
                  setCursorStyle: function (t) {
                    var e = this.proxy;
                    e.setCursor && e.setCursor(t)
                  },
                  dispatchToElement: function (t, i, n) {
                    t = t || {};
                    for (var r = "on" + i, a = e(i, t, n), o = t[Ce]; o && (o[r] && (a.cancelBubble = o[r].call(o, a)), o[S](i, a), o = o[N], !a.cancelBubble););
                    a.cancelBubble || (this[S](i, a), this.painter && this.painter.eachOtherLayer(function (t) {
                      typeof t[r] == oe && t[r].call(t, a), t[S] && t[S](i, a)
                    }))
                  },
                  findHover: function (t, e, i) {
                    for (var r = this.storage.getDisplayList(), a = {}, o = r[ve] - 1; o >= 0; o--) {
                      var l;
                      if (r[o] !== i && !r[o][k] && (l = n(r[o], t, e)) && (!a.topTarget && (a.topTarget = r[o]), l !== s)) {
                        a[Ce] = r[o];
                        break
                      }
                    }
                    return a
                  }
                }, r.each(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"], function (t) {
                  u[ye][t] = function (e) {
                    var i = this.findHover(e.zrX, e.zrY),
                      n = i[Ce];
                    if ("mousedown" === t) this._downel = n, this._upel = n;
                    else if ("mosueup" === t) this._upel = n;
                    else if ("click" === t && this._downel !== this._upel) return;
                    this.dispatchToElement(i, t, e)
                  }
                }), r.mixin(u, o), r.mixin(u, a), u
              }), e("zrender/Storage", [Ve, "./core/util", "./core/env", "./container/Group", "./core/timsort"], function (t) {
                function e(t, e) {
                  return t[_] === e[_] ? t.z === e.z ? t.z2 - e.z2 : t.z - e.z : t[_] - e[_]
                }
                var i = t("./core/util"),
                  n = t("./core/env"),
                  r = t("./container/Group"),
                  a = t("./core/timsort"),
                  o = function () {
                    this._roots = [], this._displayList = [], this._displayListLen = 0
                  };
                return o[ye] = {
                  constructor: o,
                  traverse: function (t, e) {
                    for (var i = 0; i < this._roots[ve]; i++) this._roots[i][b](t, e)
                  },
                  getDisplayList: function (t, e) {
                    return e = e || !1, t && this.updateDisplayList(e), this._displayList
                  },
                  updateDisplayList: function (t) {
                    this._displayListLen = 0;
                    for (var i = this._roots, r = this._displayList, o = 0, s = i[ve]; s > o; o++) this._updateAndAddDisplayable(i[o], null, t);
                    r[ve] = this._displayListLen, n[I] && a(r, e)
                  },
                  _updateAndAddDisplayable: function (t, e, i) {
                    if (!t[k] || i) {
                      t.beforeUpdate(), t[s] && t[ae](), t.afterUpdate();
                      var n = t.clipPath;
                      if (n) {
                        e = e ? e.slice() : [];
                        for (var r = n, a = t; r;) r[N] = a, r.updateTransform(), e.push(r), a = r, r = r.clipPath
                      }
                      if (t.isGroup) {
                        for (var o = t._children, l = 0; l < o[ve]; l++) {
                          var u = o[l];
                          t[s] && (u[s] = !0), this._updateAndAddDisplayable(u, e, i)
                        }
                        t[s] = !1
                      } else t.__clipPaths = e, this._displayList[this._displayListLen++] = t
                    }
                  },
                  addRoot: function (t) {
                    t.__storage !== this && (t instanceof r && t.addChildrenToStorage(this), this.addToStorage(t), this._roots.push(t))
                  },
                  delRoot: function (t) {
                    if (null == t) {
                      for (var e = 0; e < this._roots[ve]; e++) {
                        var n = this._roots[e];
                        n instanceof r && n.delChildrenFromStorage(this)
                      }
                      return this._roots = [], this._displayList = [], void(this._displayListLen = 0)
                    }
                    if (t instanceof Array)
                      for (var e = 0, a = t[ve]; a > e; e++) this.delRoot(t[e]);
                    else {
                      var o = i[ce](this._roots, t);
                      o >= 0 && (this.delFromStorage(t), this._roots[M](o, 1), t instanceof r && t.delChildrenFromStorage(this))
                    }
                  },
                  addToStorage: function (t) {
                    return t.__storage = this, t.dirty(!1), this
                  },
                  delFromStorage: function (t) {
                    return t && (t.__storage = null), this
                  },
                  dispose: function () {
                    this._renderList = this._roots = null
                  },
                  displayableSortFunc: e
                }, o
              }), e("zrender/animation/Animation", [Ve, a, "../core/event", "./requestAnimationFrame", "./Animator"], function (t) {
                var e = t(a),
                  i = t("../core/event").Dispatcher,
                  n = t("./requestAnimationFrame"),
                  r = t("./Animator"),
                  o = function (t) {
                    t = t || {}, this.stage = t.stage || {}, this.onframe = t.onframe || function () {}, this._clips = [], this._running = !1, this._time, this._pausedTime, this._pauseStart, this._paused = !1, i.call(this)
                  };
                return o[ye] = {
                  constructor: o,
                  addClip: function (t) {
                    this._clips.push(t)
                  },
                  addAnimator: function (t) {
                    t[H] = this;
                    for (var e = t.getClips(), i = 0; i < e[ve]; i++) this.addClip(e[i])
                  },
                  removeClip: function (t) {
                    var i = e[ce](this._clips, t);
                    i >= 0 && this._clips[M](i, 1)
                  },
                  removeAnimator: function (t) {
                    for (var e = t.getClips(), i = 0; i < e[ve]; i++) this.removeClip(e[i]);
                    t[H] = null
                  },
                  _update: function () {
                    for (var t = (new Date).getTime() - this._pausedTime, e = t - this._time, i = this._clips, n = i[ve], r = [], a = [], o = 0; n > o; o++) {
                      var s = i[o],
                        l = s.step(t, e);
                      l && (r.push(l), a.push(s))
                    }
                    for (var o = 0; n > o;) i[o]._needsRemove ? (i[o] = i[n - 1], i.pop(), n--) : o++;
                    n = r[ve];
                    for (var o = 0; n > o; o++) a[o].fire(r[o]);
                    this._time = t, this.onframe(e), this[S]("frame", e), this.stage[ae] && this.stage[ae]()
                  },
                  _startLoop: function () {
                    function t() {
                      e._running && (n(t), !e._paused && e._update())
                    }
                    var e = this;
                    this._running = !0, n(t)
                  },
                  start: function () {
                    this._time = (new Date).getTime(), this._pausedTime = 0, this._startLoop()
                  },
                  stop: function () {
                    this._running = !1
                  },
                  pause: function () {
                    this._paused || (this._pauseStart = (new Date).getTime(), this._paused = !0)
                  },
                  resume: function () {
                    this._paused && (this._pausedTime += (new Date).getTime() - this._pauseStart, this._paused = !1)
                  },
                  clear: function () {
                    this._clips = []
                  },
                  animate: function (t, e) {
                    e = e || {};
                    var i = new r(t, e.loop, e.getter, e.setter);
                    return this.addAnimator(i), i
                  }
                }, e.mixin(o, i), o
              }), e("zrender/dom/HandlerProxy", [Ve, "../core/event", a, "../mixin/Eventful", "../core/env", "../core/GestureMgr"], function (t) {
                function e(t) {
                  return "mousewheel" === t && h.browser.firefox ? "DOMMouseScroll" : t
                }

                function i(t, e, i) {
                  var n = t._gestureMgr;
                  "start" === i && n.clear();
                  var r = n.recognize(e, t.handler.findHover(e.zrX, e.zrY, null)[Ce], t.dom);
                  if ("end" === i && n.clear(), r) {
                    var a = r.type;
                    e.gestureEvent = a, t.handler.dispatchToElement({
                      target: r[Ce]
                    }, a, r.event)
                  }
                }

                function n(t) {
                  t._touching = !0, clearTimeout(t._touchTimer), t._touchTimer = setTimeout(function () {
                    t._touching = !1
                  }, 700)
                }

                function r(t) {
                  var e = t.pointerType;
                  return "pen" === e || "touch" === e
                }

                function o(t) {
                  function e(t, e) {
                    return function () {
                      return e._touching ? void 0 : t.apply(e, arguments)
                    }
                  }
                  u.each(y, function (e) {
                    t._handlers[e] = u.bind(w[e], t)
                  }), u.each(b, function (e) {
                    t._handlers[e] = u.bind(w[e], t)
                  }), u.each(g, function (i) {
                    t._handlers[i] = e(w[i], t)
                  })
                }

                function s(t) {
                  function i(i, n) {
                    u.each(i, function (i) {
                      f(t, e(i), n._handlers[i])
                    }, n)
                  }
                  c.call(this), this.dom = t, this._touching = !1, this._touchTimer, this._gestureMgr = new d, this._handlers = {}, o(this), h.pointerEventsSupported ? i(b, this) : (h.touchEventsSupported && i(y, this), i(g, this))
                }
                var l = t("../core/event"),
                  u = t(a),
                  c = t("../mixin/Eventful"),
                  h = t("../core/env"),
                  d = t("../core/GestureMgr"),
                  f = l.addEventListener,
                  p = l.removeEventListener,
                  m = l.normalizeEvent,
                  v = 300,
                  g = ["click", "dblclick", "mousewheel", "mouseout", "mouseup", "mousedown", "mousemove", "contextmenu"],
                  y = ["touchstart", "touchend", "touchmove"],
                  _ = {
                    pointerdown: 1,
                    pointerup: 1,
                    pointermove: 1,
                    pointerout: 1
                  },
                  b = u.map(g, function (t) {
                    var e = t[x]("mouse", "pointer");
                    return _[e] ? e : t
                  }),
                  w = {
                    mousemove: function (t) {
                      t = m(this.dom, t), this[S]("mousemove", t)
                    },
                    mouseout: function (t) {
                      t = m(this.dom, t);
                      var e = t.toElement || t.relatedTarget;
                      if (e != this.dom)
                        for (; e && 9 != e.nodeType;) {
                          if (e === this.dom) return;
                          e = e.parentNode
                        }
                      this[S]("mouseout", t)
                    },
                    touchstart: function (t) {
                      t = m(this.dom, t), t.zrByTouch = !0, this._lastTouchMoment = new Date, i(this, t, "start"), w.mousemove.call(this, t), w.mousedown.call(this, t), n(this)
                    },
                    touchmove: function (t) {
                      t = m(this.dom, t), t.zrByTouch = !0, i(this, t, "change"), w.mousemove.call(this, t), n(this)
                    },
                    touchend: function (t) {
                      t = m(this.dom, t), t.zrByTouch = !0, i(this, t, "end"), w.mouseup.call(this, t), +new Date - this._lastTouchMoment < v && w.click.call(this, t), n(this)
                    },
                    pointerdown: function (t) {
                      w.mousedown.call(this, t)
                    },
                    pointermove: function (t) {
                      r(t) || w.mousemove.call(this, t)
                    },
                    pointerup: function (t) {
                      w.mouseup.call(this, t)
                    },
                    pointerout: function (t) {
                      r(t) || w.mouseout.call(this, t)
                    }
                  };
                u.each(["click", "mousedown", "mouseup", "mousewheel", "dblclick", "contextmenu"], function (t) {
                  w[t] = function (e) {
                    e = m(this.dom, e), this[S](t, e)
                  }
                });
                var M = s[ye];
                return M[T] = function () {
                  for (var t = g[se](y), i = 0; i < t[ve]; i++) {
                    var n = t[i];
                    p(this.dom, e(n), this._handlers[n])
                  }
                }, M.setCursor = function (t) {
                  this.dom.style.cursor = t || "default"
                }, u.mixin(s, c), s
              }), e("zrender/Painter", [Ve, "./config", "./core/util", "./core/log", "./core/BoundingRect", "./core/timsort", "./Layer", "./animation/requestAnimationFrame", "./graphic/Image"], function (t) {
                function e(t) {
                  return parseInt(t, 10)
                }

                function a(t) {
                  return t ? t.__builtin__ ? !0 : typeof t.resize !== oe || typeof t.refresh !== oe ? !1 : !0 : !1
                }

                function o(t) {
                  t.__unusedCount++
                }

                function l(t) {
                  1 == t.__unusedCount && t.clear()
                }

                function c(t, e, i) {
                  return C.copy(t[ke]()), t[u] && C[p](t[u]), A.width = e, A[Le] = i, !C.intersect(A)
                }

                function d(t, e) {
                  if (t == e) return !1;
                  if (!t || !e || t[ve] !== e[ve]) return !0;
                  for (var i = 0; i < t[ve]; i++)
                    if (t[i] !== e[i]) return !0
                }

                function m(t, e) {
                  for (var i = 0; i < t[ve]; i++) {
                    var n = t[i];
                    n.setTransform(e), e.beginPath(), n.buildPath(e, n.shape), e.clip(), n.restoreTransform(e)
                  }
                }

                function v(t, e) {
                  var i = document[he]("div");
                  return i.style.cssText = ["position:relative", "overflow:hidden", "width:" + t + "px", "height:" + e + "px", "padding:0", "margin:0", "border-width:0"].join(";") + ";", i
                }
                var g = t("./config"),
                  y = t("./core/util"),
                  x = t("./core/log"),
                  b = t("./core/BoundingRect"),
                  w = t("./core/timsort"),
                  T = t("./Layer"),
                  S = t("./animation/requestAnimationFrame"),
                  P = 5,
                  C = new b(0, 0, 0, 0),
                  A = new b(0, 0, 0, 0),
                  k = function (t, e, i) {
                    var n = !t.nodeName || "CANVAS" === t.nodeName.toUpperCase();
                    this._opts = i = y[ge]({}, i || {}), this.dpr = i.devicePixelRatio || g.devicePixelRatio, this._singleCanvas = n, this.root = t;
                    var r = t.style;
                    r && (r["-webkit-tap-highlight-color"] = L, r["-webkit-user-select"] = r["user-select"] = r["-webkit-touch-callout"] = "none", t.innerHTML = ""), this.storage = e;
                    var a = this._zlevelList = [],
                      o = this._layers = {};
                    if (this._layerConfig = {}, n) {
                      null != i.width && (t.width = i.width), null != i[Le] && (t[Le] = i[Le]);
                      var s = t.width,
                        l = t[Le];
                      this._width = s, this._height = l;
                      var u = new T(t, this, 1);
                      u.initContext(), o[0] = u, a.push(0), this._domRoot = t
                    } else {
                      this._width = this._getSize(0), this._height = this._getSize(1);
                      var c = this._domRoot = v(this._width, this._height);
                      t.appendChild(c)
                    }
                    this._progressiveLayers = [], this._hoverlayer, this._hoverElements = []
                  };
                return k[ye] = {
                  constructor: k,
                  isSingleCanvas: function () {
                    return this._singleCanvas
                  },
                  getViewportRoot: function () {
                    return this._domRoot
                  },
                  refresh: function (t) {
                    var e = this.storage.getDisplayList(!0),
                      i = this._zlevelList;
                    this._paintList(e, t);
                    for (var n = 0; n < i[ve]; n++) {
                      var r = i[n],
                        a = this._layers[r];
                      !a.__builtin__ && a.refresh && a.refresh()
                    }
                    return this.refreshHover(), this._progressiveLayers[ve] && this._startProgessive(), this
                  },
                  addHover: function (t, e) {
                    if (!t.__hoverMir) {
                      var i = new t.constructor({
                        style: t.style,
                        shape: t.shape
                      });
                      i.__from = t, t.__hoverMir = i, i[_e](e), this._hoverElements.push(i)
                    }
                  },
                  removeHover: function (t) {
                    var e = t.__hoverMir,
                      i = this._hoverElements,
                      n = y[ce](i, e);
                    n >= 0 && i[M](n, 1), t.__hoverMir = null
                  },
                  clearHover: function () {
                    for (var t = this._hoverElements, e = 0; e < t[ve]; e++) {
                      var i = t[e].__from;
                      i && (i.__hoverMir = null)
                    }
                    t[ve] = 0
                  },
                  refreshHover: function () {
                    var t = this._hoverElements,
                      e = t[ve],
                      i = this._hoverlayer;
                    if (i && i.clear(), e) {
                      w(t, this.storage.displayableSortFunc), i || (i = this._hoverlayer = this.getLayer(1e5));
                      var n = {};
                      i.ctx.save();
                      for (var r = 0; e > r;) {
                        var a = t[r],
                          o = a.__from;
                        o && o.__zr ? (r++, o.invisible || (a[u] = o[u], a.invTransform = o.invTransform, a.__clipPaths = o.__clipPaths, this._doPaintEl(a, i, !0, n))) : (t[M](r, 1), o.__hoverMir = null, e--)
                      }
                      i.ctx.restore()
                    }
                  },
                  _startProgessive: function () {
                    function t() {
                      i === e._progressiveToken && e.storage && (e._doPaintList(e.storage.getDisplayList()), e._furtherProgressive ? (e._progress++, S(t)) : e._progressiveToken = -1)
                    }
                    var e = this;
                    if (e._furtherProgressive) {
                      var i = e._progressiveToken = +new Date;
                      e._progress++, S(t)
                    }
                  },
                  _clearProgressive: function () {
                    this._progressiveToken = -1, this._progress = 0, y.each(this._progressiveLayers, function (t) {
                      t[s] && t.clear()
                    })
                  },
                  _paintList: function (t, e) {
                    null == e && (e = !1), this._updateLayerStatus(t), this._clearProgressive(), this.eachBuiltinLayer(o), this._doPaintList(t, e), this.eachBuiltinLayer(l)
                  },
                  _doPaintList: function (t, e) {
                    function i(t) {
                      var e = o.dpr || 1;
                      o.save(), o.globalAlpha = 1, o[r] = 0, n[s] = !0, o.setTransform(1, 0, 0, 1, 0, 0), o.drawImage(t.dom, 0, 0, d * e, f * e), o.restore()
                    }
                    for (var n, a, o, l, u, c, h = 0, d = this._width, f = this._height, p = this._progress, m = 0, v = t[ve]; v > m; m++) {
                      var g = t[m],
                        b = this._singleCanvas ? 0 : g[_],
                        w = g.__frame;
                      if (0 > w && u && (i(u), u = null), a !== b && (o && o.restore(), l = {}, a = b, n = this.getLayer(a), n.__builtin__ || x("ZLevel " + a + " has been used by unkown layer " + n.id), o = n.ctx, o.save(), n.__unusedCount = 0, (n[s] || e) && n.clear()), n[s] || e) {
                        if (w >= 0) {
                          if (!u) {
                            if (u = this._progressiveLayers[Math.min(h++, P - 1)], u.ctx.save(), u.renderScope = {}, u && u.__progress > u.__maxProgress) {
                              m = u.__nextIdxNotProg - 1;
                              continue
                            }
                            c = u.__progress, u[s] || (p = c), u.__progress = p + 1
                          }
                          w === p && this._doPaintEl(g, u, !0, u.renderScope)
                        } else this._doPaintEl(g, n, e, l);
                        g[s] = !1
                      }
                    }
                    u && i(u), o && o.restore(), this._furtherProgressive = !1, y.each(this._progressiveLayers, function (t) {
                      t.__maxProgress >= t.__progress && (this._furtherProgressive = !0)
                    }, this)
                  },
                  _doPaintEl: function (t, e, i, n) {
                    var r = e.ctx,
                      a = t[u];
                    if (!(!e[s] && !i || t.invisible || 0 === t.style[xe] || a && !a[0] && !a[3] || t.culling && c(t, this._width, this._height))) {
                      var o = t.__clipPaths;
                      (n.prevClipLayer !== e || d(o, n.prevElClipPaths)) && (n.prevElClipPaths && (n.prevClipLayer.ctx.restore(), n.prevClipLayer = n.prevElClipPaths = null, n.prevEl = null), o && (r.save(), m(o, r), n.prevClipLayer = e, n.prevElClipPaths = o)), t.beforeBrush && t.beforeBrush(r), t.brush(r, n.prevEl || null), n.prevEl = t, t.afterBrush && t.afterBrush(r)
                    }
                  },
                  getLayer: function (t) {
                    if (this._singleCanvas) return this._layers[0];
                    var e = this._layers[t];
                    return e || (e = new T("zr_" + t, this, this.dpr), e.__builtin__ = !0, this._layerConfig[t] && y.merge(e, this._layerConfig[t], !0), this.insertLayer(t, e), e.initContext()), e
                  },
                  insertLayer: function (t, e) {
                    var i = this._layers,
                      n = this._zlevelList,
                      r = n[ve],
                      o = null,
                      s = -1,
                      l = this._domRoot;
                    if (i[t]) return void x("ZLevel " + t + " has been used already");
                    if (!a(e)) return void x("Layer of zlevel " + t + " is not valid");
                    if (r > 0 && t > n[0]) {
                      for (s = 0; r - 1 > s && !(n[s] < t && n[s + 1] > t); s++);
                      o = i[n[s]]
                    }
                    if (n[M](s + 1, 0, t), i[t] = e, !e.virtual)
                      if (o) {
                        var u = o.dom;
                        u.nextSibling ? l.insertBefore(e.dom, u.nextSibling) : l.appendChild(e.dom)
                      } else l.firstChild ? l.insertBefore(e.dom, l.firstChild) : l.appendChild(e.dom)
                  },
                  eachLayer: function (t, e) {
                    var i, n, r = this._zlevelList;
                    for (n = 0; n < r[ve]; n++) i = r[n], t.call(e, this._layers[i], i)
                  },
                  eachBuiltinLayer: function (t, e) {
                    var i, n, r, a = this._zlevelList;
                    for (r = 0; r < a[ve]; r++) n = a[r], i = this._layers[n], i.__builtin__ && t.call(e, i, n)
                  },
                  eachOtherLayer: function (t, e) {
                    var i, n, r, a = this._zlevelList;
                    for (r = 0; r < a[ve]; r++) n = a[r], i = this._layers[n], i.__builtin__ || t.call(e, i, n)
                  },
                  getLayers: function () {
                    return this._layers
                  },
                  _updateLayerStatus: function (t) {
                    var e = this._layers,
                      i = this._progressiveLayers,
                      n = {},
                      r = {};
                    this.eachBuiltinLayer(function (t, e) {
                      n[e] = t.elCount, t.elCount = 0, t[s] = !1
                    }), y.each(i, function (t, e) {
                      r[e] = t.elCount, t.elCount = 0, t[s] = !1
                    });
                    for (var a, o, l = 0, u = 0, c = 0, h = t[ve]; h > c; c++) {
                      var d = t[c],
                        f = this._singleCanvas ? 0 : d[_],
                        p = e[f],
                        m = d.progressive;
                      if (p && (p.elCount++, p[s] = p[s] || d[s]), m >= 0) {
                        o !== m && (o = m, u++);
                        var v = d.__frame = u - 1;
                        if (!a) {
                          var g = Math.min(l, P - 1);
                          a = i[g], a || (a = i[g] = new T("progressive", this, this.dpr), a.initContext()), a.__maxProgress = 0
                        }
                        a[s] = a[s] || d[s], a.elCount++, a.__maxProgress = Math.max(a.__maxProgress, v), a.__maxProgress >= a.__progress && (p[s] = !0)
                      } else d.__frame = -1, a && (a.__nextIdxNotProg = c, l++, a = null)
                    }
                    a && (l++, a.__nextIdxNotProg = c), this.eachBuiltinLayer(function (t, e) {
                      n[e] !== t.elCount && (t[s] = !0)
                    }), i[ve] = Math.min(l, P), y.each(i, function (t, e) {
                      r[e] !== t.elCount && (d[s] = !0), t[s] && (t.__progress = 0)
                    })
                  },
                  clear: function () {
                    return this.eachBuiltinLayer(this._clearLayer), this
                  },
                  _clearLayer: function (t) {
                    t.clear()
                  },
                  configLayer: function (t, e) {
                    if (e) {
                      var i = this._layerConfig;
                      i[t] ? y.merge(i[t], e, !0) : i[t] = e;
                      var n = this._layers[t];
                      n && y.merge(n, i[t], !0)
                    }
                  },
                  delLayer: function (t) {
                    var e = this._layers,
                      i = this._zlevelList,
                      n = e[t];
                    n && (n.dom.parentNode.removeChild(n.dom), delete e[t], i[M](y[ce](i, t), 1))
                  },
                  resize: function (t, e) {
                    var i = this._domRoot;
                    i.style.display = "none";
                    var n = this._opts;
                    if (null != t && (n.width = t), null != e && (n[Le] = e), t = this._getSize(0), e = this._getSize(1), i.style.display = "", this._width != t || e != this._height) {
                      i.style.width = t + "px", i.style[Le] = e + "px";
                      for (var r in this._layers) this._layers.hasOwnProperty(r) && this._layers[r].resize(t, e);
                      y.each(this._progressiveLayers, function (i) {
                        i.resize(t, e)
                      }), this.refresh(!0)
                    }
                    return this._width = t, this._height = e, this
                  },
                  clearLayer: function (t) {
                    var e = this._layers[t];
                    e && e.clear()
                  },
                  dispose: function () {
                    this.root.innerHTML = "", this.root = this.storage = this._domRoot = this._layers = null
                  },
                  getRenderedCanvas: function (t) {
                    function e(t, e) {
                      var n = o._zlevelList;
                      null == t && (t = -1 / 0);
                      for (var r, a = 0; a < n[ve]; a++) {
                        var s = n[a],
                          l = o._layers[s];
                        if (!l.__builtin__ && s > t && e > s) {
                          r = l;
                          break
                        }
                      }
                      r && r.renderToCanvas && (i.ctx.save(), r.renderToCanvas(i.ctx), i.ctx.restore())
                    }
                    if (t = t || {}, this._singleCanvas) return this._layers[0].dom;
                    var i = new T("image", this, t.pixelRatio || this.dpr);
                    i.initContext(), i.clearColor = t.backgroundColor, i.clear();
                    for (var n, r = this.storage.getDisplayList(!0), a = {}, o = this, s = 0; s < r[ve]; s++) {
                      var l = r[s];
                      l[_] !== n && (e(n, l[_]), n = l[_]), this._doPaintEl(l, i, !0, a)
                    }
                    return e(n, 1 / 0), i.dom
                  },
                  getWidth: function () {
                    return this._width
                  },
                  getHeight: function () {
                    return this._height
                  },
                  _getSize: function (t) {
                    var i = this._opts,
                      n = ["width", Le][t],
                      r = ["clientWidth", "clientHeight"][t],
                      a = ["paddingLeft", "paddingTop"][t],
                      o = ["paddingRight", "paddingBottom"][t];
                    if (null != i[n] && "auto" !== i[n]) return parseFloat(i[n]);
                    var s = this.root,
                      l = document.defaultView.getComputedStyle(s);
                    return (s[r] || e(l[n]) || e(s.style[n])) - (e(l[a]) || 0) - (e(l[o]) || 0) | 0
                  },
                  pathToImage: function (e, a) {
                    a = a || this.dpr;
                    var o = document[he]("canvas"),
                      s = o.getContext("2d"),
                      l = e[ke](),
                      u = e.style,
                      c = u[r],
                      d = u[n],
                      p = u[i],
                      m = u.hasStroke() ? u[f] : 0,
                      v = Math.max(m / 2, -d + c),
                      g = Math.max(m / 2, d + c),
                      y = Math.max(m / 2, -p + c),
                      x = Math.max(m / 2, p + c),
                      _ = l.width + v + g,
                      b = l[Le] + y + x;
                    o.width = _ * a, o[Le] = b * a, s.scale(a, a), s.clearRect(0, 0, _, b), s.dpr = a;
                    var w = {
                      position: e[be],
                      rotation: e[h],
                      scale: e.scale
                    };
                    e[be] = [v - l.x, y - l.y], e[h] = 0, e.scale = [1, 1], e.updateTransform(), e && e.brush(s);
                    var M = t("./graphic/Image"),
                      T = new M({
                        style: {
                          x: 0,
                          y: 0,
                          image: o
                        }
                      });
                    return null != w[be] && (T[be] = e[be] = w[be]), null != w[h] && (T[h] = e[h] = w[h]), null != w.scale && (T.scale = e.scale = w.scale), T
                  }
                }, k
              }), e("zrender/graphic/helper/smoothSpline", [Ve, "../../core/vector"], function (t) {
                function e(t, e, i, n, r, a, o) {
                  var s = .5 * (i - t),
                    l = .5 * (n - e);
                  return (2 * (e - i) + s + l) * o + (-3 * (e - i) - 2 * s - l) * a + s * r + e
                }
                var i = t("../../core/vector");
                return function (t, n) {
                  for (var r = t[ve], a = [], o = 0, s = 1; r > s; s++) o += i.distance(t[s - 1], t[s]);
                  var l = o / 2;
                  l = r > l ? r : l;
                  for (var s = 0; l > s; s++) {
                    var u, c, h, d = s / (l - 1) * (n ? r : r - 1),
                      f = Math.floor(d),
                      p = d - f,
                      m = t[f % r];
                    n ? (u = t[(f - 1 + r) % r], c = t[(f + 1) % r], h = t[(f + 2) % r]) : (u = t[0 === f ? f : f - 1], c = t[f > r - 2 ? r - 1 : f + 1], h = t[f > r - 3 ? r - 1 : f + 2]);
                    var v = p * p,
                      g = p * v;
                    a.push([e(u[0], m[0], c[0], h[0], p, v, g), e(u[1], m[1], c[1], h[1], p, v, g)])
                  }
                  return a
                }
              }), e("zrender/graphic/helper/smoothBezier", [Ve, "../../core/vector"], function (t) {
                var e = t("../../core/vector"),
                  i = e.min,
                  n = e.max,
                  r = e.scale,
                  a = e.distance,
                  o = e.add;
                return function (t, s, l, u) {
                  var c, h, d, f, p = [],
                    m = [],
                    v = [],
                    g = [];
                  if (u) {
                    d = [1 / 0, 1 / 0], f = [-1 / 0, -1 / 0];
                    for (var y = 0, x = t[ve]; x > y; y++) i(d, d, t[y]), n(f, f, t[y]);
                    i(d, d, u[0]), n(f, f, u[1])
                  }
                  for (var y = 0, x = t[ve]; x > y; y++) {
                    var _ = t[y];
                    if (l) c = t[y ? y - 1 : x - 1], h = t[(y + 1) % x];
                    else {
                      if (0 === y || y === x - 1) {
                        p.push(e.clone(t[y]));
                        continue
                      }
                      c = t[y - 1], h = t[y + 1]
                    }
                    e.sub(m, h, c), r(m, m, s);
                    var b = a(_, c),
                      w = a(_, h),
                      M = b + w;
                    0 !== M && (b /= M, w /= M), r(v, m, -b), r(g, m, w);
                    var T = o([], _, v),
                      S = o([], _, g);
                    u && (n(T, T, d), i(T, T, f), n(S, S, d), i(S, S, f)), p.push(T), p.push(S)
                  }
                  return l && p.push(p.shift()), p
                }
              }), e("zrender/mixin/Draggable", [Ve], function () {
                function t() {
                  this.on("mousedown", this._dragStart, this), this.on("mousemove", this._drag, this), this.on("mouseup", this._dragEnd, this), this.on("globalout", this._dragEnd, this)
                }

                function e(t, e) {
                  return {
                    target: t,
                    topTarget: e && e.topTarget
                  }
                }
                return t[ye] = {
                  constructor: t,
                  _dragStart: function (t) {
                    var i = t[Ce];
                    i && i.draggable && (this._draggingTarget = i, i.dragging = !0, this._x = t.offsetX, this._y = t.offsetY, this.dispatchToElement(e(i, t), "dragstart", t.event))
                  },
                  _drag: function (t) {
                    var i = this._draggingTarget;
                    if (i) {
                      var n = t.offsetX,
                        r = t.offsetY,
                        a = n - this._x,
                        o = r - this._y;
                      this._x = n, this._y = r, i.drift(a, o, t), this.dispatchToElement(e(i, t), "drag", t.event);
                      var s = this.findHover(n, r, i)[Ce],
                        l = this._dropTarget;
                      this._dropTarget = s, i !== s && (l && s !== l && this.dispatchToElement(e(l, t), "dragleave", t.event), s && s !== l && this.dispatchToElement(e(s, t), "dragenter", t.event))
                    }
                  },
                  _dragEnd: function (t) {
                    var i = this._draggingTarget;
                    i && (i.dragging = !1), this.dispatchToElement(e(i, t), "dragend", t.event), this._dropTarget && this.dispatchToElement(e(this._dropTarget, t), "drop", t.event), this._draggingTarget = null, this._dropTarget = null
                  }
                }, t
              }), e("zrender/graphic/helper/roundRect", [Ve], function () {
                return {
                  buildPath: function (t, e) {
                    var i, n, r, a, o = e.x,
                      s = e.y,
                      u = e.width,
                      c = e[Le],
                      h = e.r;
                    0 > u && (o += u, u = -u), 0 > c && (s += c, c = -c), typeof h === le ? i = n = r = a = h : h instanceof Array ? 1 === h[ve] ? i = n = r = a = h[0] : 2 === h[ve] ? (i = r = h[0], n = a = h[1]) : 3 === h[ve] ? (i = h[0], n = a = h[1], r = h[2]) : (i = h[0], n = h[1], r = h[2], a = h[3]) : i = n = r = a = 0;
                    var d;
                    i + n > u && (d = i + n, i *= u / d, n *= u / d), r + a > u && (d = r + a, r *= u / d, a *= u / d), n + r > c && (d = n + r, n *= c / d, r *= c / d), i + a > c && (d = i + a, i *= c / d, a *= c / d), t[l](o + i, s), t.lineTo(o + u - n, s), 0 !== n && t.quadraticCurveTo(o + u, s, o + u, s + n), t.lineTo(o + u, s + c - r), 0 !== r && t.quadraticCurveTo(o + u, s + c, o + u - r, s + c), t.lineTo(o + a, s + c), 0 !== a && t.quadraticCurveTo(o, s + c, o, s + c - a), t.lineTo(o, s + i), 0 !== i && t.quadraticCurveTo(o, s, o + i, s)
                  }
                }
              }), e("zrender/animation/requestAnimationFrame", [Ve], function () {
                return typeof window !== o && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) || function (t) {
                  setTimeout(t, 16)
                }
              }), e("zrender/core/event", [Ve, "../mixin/Eventful", "./env"], function (t) {
                function e(t) {
                  return t.getBoundingClientRect ? t.getBoundingClientRect() : {
                    left: 0,
                    top: 0
                  }
                }

                function i(t, e, i, r) {
                  return i = i || {}, r || !u[I] ? n(t, e, i) : u.browser.firefox && null != e.layerX && e.layerX !== e.offsetX ? (i.zrX = e.layerX, i.zrY = e.layerY) : null != e.offsetX ? (i.zrX = e.offsetX, i.zrY = e.offsetY) : n(t, e, i), i
                }

                function n(t, i, n) {
                  var r = e(t);
                  n.zrX = i.clientX - r.left, n.zrY = i.clientY - r.top
                }

                function r(t, e, n) {
                  if (e = e || window.event, null != e.zrX) return e;
                  var r = e.type,
                    a = r && r[ce]("touch") >= 0;
                  if (a) {
                    var o = "touchend" != r ? e.targetTouches[0] : e.changedTouches[0];
                    o && i(t, o, e, n)
                  } else i(t, e, e, n), e.zrDelta = e.wheelDelta ? e.wheelDelta / 120 : -(e.detail || 0) / 3;
                  return e
                }

                function a(t, e, i) {
                  c ? t.addEventListener(e, i) : t.attachEvent("on" + e, i)
                }

                function s(t, e, i) {
                  c ? t.removeEventListener(e, i) : t.detachEvent("on" + e, i)
                }
                var l = t("../mixin/Eventful"),
                  u = t("./env"),
                  c = typeof window !== o && !!window.addEventListener,
                  h = c ? function (t) {
                    t.preventDefault(), t.stopPropagation(), t.cancelBubble = !0
                  } : function (t) {
                    t.returnValue = !1, t.cancelBubble = !0
                  };
                return {
                  clientToLocal: i,
                  normalizeEvent: r,
                  addEventListener: a,
                  removeEventListener: s,
                  stop: h,
                  Dispatcher: l
                }
              }), e("echarts/coord/axisDefault", [Ve, Fe], function (t) {
                var e = t(Fe),
                  i = {
                    show: !0,
                    zlevel: 0,
                    z: 0,
                    inverse: !1,
                    name: "",
                    nameLocation: "end",
                    nameRotate: null,
                    nameTruncate: {
                      maxWidth: null,
                      ellipsis: "...",
                      placeholder: "."
                    },
                    nameTextStyle: {},
                    nameGap: 15,
                    silent: !1,
                    triggerEvent: !1,
                    tooltip: {
                      show: !1
                    },
                    axisPointer: {},
                    axisLine: {
                      show: !0,
                      onZero: !0,
                      lineStyle: {
                        color: "#333",
                        width: 1,
                        type: "solid"
                      }
                    },
                    axisTick: {
                      show: !0,
                      inside: !1,
                      length: 5,
                      lineStyle: {
                        width: 1
                      }
                    },
                    axisLabel: {
                      show: !0,
                      inside: !1,
                      rotate: 0,
                      showMinLabel: null,
                      showMaxLabel: null,
                      margin: 8,
                      textStyle: {
                        fontSize: 12
                      }
                    },
                    splitLine: {
                      show: !0,
                      lineStyle: {
                        color: ["#ccc"],
                        width: 1,
                        type: "solid"
                      }
                    },
                    splitArea: {
                      show: !1,
                      areaStyle: {
                        color: ["rgba(250,250,250,0.3)", "rgba(200,200,200,0.3)"]
                      }
                    }
                  },
                  n = e.merge({
                    boundaryGap: !0,
                    splitLine: {
                      show: !1
                    },
                    axisTick: {
                      alignWithLabel: !1,
                      interval: "auto"
                    },
                    axisLabel: {
                      interval: "auto"
                    }
                  }, i),
                  r = e.merge({
                    boundaryGap: [0, 0],
                    splitNumber: 5
                  }, i),
                  a = e[Ee]({
                    scale: !0,
                    min: "dataMin",
                    max: "dataMax"
                  }, r),
                  o = e[Ee]({
                    scale: !0,
                    logBase: 10
                  }, r);
                return {
                  categoryAxis: n,
                  valueAxis: r,
                  timeAxis: a,
                  logAxis: o
                }
              }), e("zrender/core/GestureMgr", [Ve, "./event"], function (t) {
                function e(t) {
                  var e = t[1][0] - t[0][0],
                    i = t[1][1] - t[0][1];
                  return Math.sqrt(e * e + i * i)
                }

                function i(t) {
                  return [(t[0][0] + t[1][0]) / 2, (t[0][1] + t[1][1]) / 2]
                }
                var n = t("./event"),
                  r = function () {
                    this._track = []
                  };
                r[ye] = {
                  constructor: r,
                  recognize: function (t, e, i) {
                    return this._doTrack(t, e, i), this._recognize(t)
                  },
                  clear: function () {
                    return this._track[ve] = 0, this
                  },
                  _doTrack: function (t, e, i) {
                    var r = t.touches;
                    if (r) {
                      for (var a = {
                          points: [],
                          touches: [],
                          target: e,
                          event: t
                        }, o = 0, s = r[ve]; s > o; o++) {
                        var l = r[o],
                          u = n.clientToLocal(i, l, {});
                        a.points.push([u.zrX, u.zrY]), a.touches.push(l)
                      }
                      this._track.push(a)
                    }
                  },
                  _recognize: function (t) {
                    for (var e in a)
                      if (a.hasOwnProperty(e)) {
                        var i = a[e](this._track, t);
                        if (i) return i
                      }
                  }
                };
                var a = {
                  pinch: function (t, n) {
                    var r = t[ve];
                    if (r) {
                      var a = (t[r - 1] || {}).points,
                        o = (t[r - 2] || {}).points || a;
                      if (o && o[ve] > 1 && a && a[ve] > 1) {
                        var s = e(a) / e(o);
                        !isFinite(s) && (s = 1), n.pinchScale = s;
                        var l = i(a);
                        return n.pinchX = l[0], n.pinchY = l[1], {
                          type: "pinch",
                          target: t[0][Ce],
                          event: n
                        }
                      }
                    }
                  }
                };
                return r
              }), e("echarts/chart/bar/BaseBarSeries", [Ve, "../../model/Series", "../helper/createListFromArray"], function (t) {
                var e = t("../../model/Series"),
                  i = t("../helper/createListFromArray");
                return e[ge]({
                  type: "series.__base_bar__",
                  getInitialData: function (t, e) {
                    return i(t.data, this, e)
                  },
                  getMarkerPosition: function (t) {
                    var e = this[Re];
                    if (e) {
                      var i = e[ee](t, !0),
                        n = this[Ne](),
                        r = n.getLayout(O),
                        a = n.getLayout("size"),
                        o = e.getBaseAxis().isHorizontal() ? 0 : 1;
                      return i[o] += r + a / 2, i
                    }
                    return [0 / 0, 0 / 0]
                  },
                  defaultOption: {
                    zlevel: 0,
                    z: 2,
                    coordinateSystem: "cartesian2d",
                    legendHoverLink: !0,
                    barMinHeight: 0,
                    barMinAngle: 0,
                    itemStyle: {
                      normal: {},
                      emphasis: {}
                    }
                  }
                })
              }), e("zrender/Layer", [Ve, "./core/util", "./config", "./graphic/Style", "./graphic/Pattern"], function (t) {
                function e() {
                  return !1
                }

                function i(t, e, i, n) {
                  var r = document[he](e),
                    a = i[Pe](),
                    o = i[Se](),
                    s = r.style;
                  return s[be] = "absolute", s.left = 0, s.top = 0, s.width = a + "px", s[Le] = o + "px", r.width = a * n, r[Le] = o * n, r.setAttribute("data-zr-dom-id", t), r
                }
                var n = t("./core/util"),
                  r = t("./config"),
                  a = t("./graphic/Style"),
                  o = t("./graphic/Pattern"),
                  s = function (t, a, o) {
                    var s;
                    o = o || r.devicePixelRatio, typeof t === ue ? s = i(t, "canvas", a, o) : n[ie](t) && (s = t, t = s.id), this.id = t, this.dom = s;
                    var l = s.style;
                    l && (s.onselectstart = e, l["-webkit-user-select"] = "none", l["user-select"] = "none", l["-webkit-touch-callout"] = "none", l["-webkit-tap-highlight-color"] = "rgba(0,0,0,0)", l.padding = 0, l.margin = 0, l["border-width"] = 0), this.domBack = null, this.ctxBack = null, this.painter = a, this.config = null, this.clearColor = 0, this.motionBlur = !1, this.lastFrameAlpha = .7, this.dpr = o
                  };
                return s[ye] = {
                  constructor: s,
                  elCount: 0,
                  __dirty: !0,
                  initContext: function () {
                    this.ctx = this.dom.getContext("2d"), this.ctx.dpr = this.dpr
                  },
                  createBackBuffer: function () {
                    var t = this.dpr;
                    this.domBack = i("back-" + this.id, "canvas", this.painter, t), this.ctxBack = this.domBack.getContext("2d"), 1 != t && this.ctxBack.scale(t, t)
                  },
                  resize: function (t, e) {
                    var i = this.dpr,
                      n = this.dom,
                      r = n.style,
                      a = this.domBack;
                    r.width = t + "px", r[Le] = e + "px", n.width = t * i, n[Le] = e * i, a && (a.width = t * i, a[Le] = e * i, 1 != i && this.ctxBack.scale(i, i))
                  },
                  clear: function (t) {
                    var e = this.dom,
                      i = this.ctx,
                      n = e.width,
                      r = e[Le],
                      s = this.clearColor,
                      l = this.motionBlur && !t,
                      u = this.lastFrameAlpha,
                      c = this.dpr;
                    if (l && (this.domBack || this.createBackBuffer(), this.ctxBack.globalCompositeOperation = "copy", this.ctxBack.drawImage(e, 0, 0, n / c, r / c)), i.clearRect(0, 0, n, r), s) {
                      var h;
                      s[A] ? (h = s.__canvasGradient || a.getGradient(i, s, {
                        x: 0,
                        y: 0,
                        width: n,
                        height: r
                      }), s.__canvasGradient = h) : s.image && (h = o[ye].getCanvasPattern.call(s, i)), i.save(), i.fillStyle = h || s, i.fillRect(0, 0, n, r), i.restore()
                    }
                    if (l) {
                      var d = this.domBack;
                      i.save(), i.globalAlpha = u, i.drawImage(d, 0, 0, n, r), i.restore()
                    }
                  }
                }, s
              }), e("echarts/chart/helper/createListFromArray", [Ve, "../../data/List", "../../data/helper/completeDimensions", Fe, "../../util/model", "../../CoordinateSystem"], function (t) {
                function e(t) {
                  for (var e = 0; e < t[ve] && null == t[e];) e++;
                  return t[e]
                }

                function i(t) {
                  var i = e(t);
                  return null != i && !u[y](d(i))
                }

                function n(t, e, n) {
                  t = t || [];
                  var r = e.get(Re),
                    a = p[r],
                    m = h.get(r),
                    v = {
                      encodeDef: e.get("encode"),
                      dimsDef: e.get(X)
                    },
                    g = a && a(t, e, n, v),
                    y = g && g[X];
                  y || (y = m && (m.getDimensionsInfo ? m.getDimensionsInfo() : m[X].slice()) || ["x", "y"], y = l(y, t, v));
                  var x = g ? g.categoryIndex : -1,
                    _ = new s(y, e),
                    b = o(g, t),
                    w = {},
                    M = x >= 0 && i(t) ? function (t, e, i, n) {
                      return c.isDataItemOption(t) && (_.hasItemOption = !0), n === x ? i : f(d(t), y[n])
                    } : function (t, e, i, n) {
                      var r = d(t),
                        a = f(r && r[n], y[n]);
                      c.isDataItemOption(t) && (_.hasItemOption = !0);
                      var o = g && g.categoryAxesModels;
                      return o && o[e] && typeof a === ue && (w[e] = w[e] || o[e].getCategories(), a = u[ce](w[e], a), 0 > a && !isNaN(a) && (a = +a)), a
                    };
                  return _.hasItemOption = !1, _.initData(t, b, M), _
                }

                function r(t) {
                  return t !== re && "time" !== t
                }

                function a(t) {
                  return t === re ? m : "time" === t ? "time" : "float"
                }

                function o(t, e) {
                  var i, n = [],
                    r = t && t[X][t.categoryIndex];
                  if (r && (i = t.categoryAxesModels[r.name]), i) {
                    var a = i.getCategories();
                    if (a) {
                      var o = e[ve];
                      if (u[y](e[0]) && e[0][ve] > 1) {
                        n = [];
                        for (var s = 0; o > s; s++) n[s] = a[e[s][t.categoryIndex || 0]]
                      } else n = a.slice(0)
                    }
                  }
                  return n
                }
                var s = t("../../data/List"),
                  l = t("../../data/helper/completeDimensions"),
                  u = t(Fe),
                  c = t("../../util/model"),
                  h = t("../../CoordinateSystem"),
                  d = c.getDataItemValue,
                  f = c.converDataValue,
                  p = {
                    cartesian2d: function (t, e, i, n) {
                      var o = u.map(["xAxis", "yAxis"], function (t) {
                          return i.queryComponents({
                            mainType: t,
                            index: e.get(t + "Index"),
                            id: e.get(t + "Id")
                          })[0]
                        }),
                        s = o[0],
                        c = o[1],
                        h = s.get("type"),
                        d = c.get("type"),
                        f = [{
                          name: "x",
                          type: a(h),
                          stackable: r(h)
                        }, {
                          name: "y",
                          type: a(d),
                          stackable: r(d)
                        }],
                        p = h === re,
                        m = d === re;
                      f = l(f, t, n);
                      var v = {};
                      return p && (v.x = s), m && (v.y = c), {
                        dimensions: f,
                        categoryIndex: p ? 0 : m ? 1 : -1,
                        categoryAxesModels: v
                      }
                    },
                    singleAxis: function (t, e, i, n) {
                      var o = i.queryComponents({
                          mainType: "singleAxis",
                          index: e.get("singleAxisIndex"),
                          id: e.get("singleAxisId")
                        })[0],
                        s = o.get("type"),
                        u = s === re,
                        c = [{
                          name: "single",
                          type: a(s),
                          stackable: r(s)
                        }];
                      c = l(c, t, n);
                      var h = {};
                      return u && (h.single = o), {
                        dimensions: c,
                        categoryIndex: u ? 0 : -1,
                        categoryAxesModels: h
                      }
                    },
                    polar: function (t, e, i, n) {
                      var o = i.queryComponents({
                          mainType: "polar",
                          index: e.get("polarIndex"),
                          id: e.get("polarId")
                        })[0],
                        s = o.findAxisModel("angleAxis"),
                        u = o.findAxisModel("radiusAxis"),
                        c = u.get("type"),
                        h = s.get("type"),
                        d = [{
                          name: "radius",
                          type: a(c),
                          stackable: r(c)
                        }, {
                          name: "angle",
                          type: a(h),
                          stackable: r(h)
                        }],
                        f = h === re,
                        p = c === re;
                      d = l(d, t, n);
                      var m = {};
                      return p && (m.radius = u), f && (m.angle = s), {
                        dimensions: d,
                        categoryIndex: f ? 1 : p ? 0 : -1,
                        categoryAxesModels: m
                      }
                    },
                    geo: function (t, e, i, n) {
                      return {
                        dimensions: l([{
                          name: "lng"
                        }, {
                          name: "lat"
                        }], t, n)
                      }
                    }
                  };
                return n
              }), e("echarts/preprocessor/helper/compatStyle", [Ve, Fe], function (t) {
                function e(t) {
                  var e = t && t.itemStyle;
                  e && i.each(n, function (n) {
                    var r = e[U],
                      a = e.emphasis;
                    r && r[n] && (t[n] = t[n] || {}, t[n][U] ? i.merge(t[n][U], r[n]) : t[n][U] = r[n], r[n] = null), a && a[n] && (t[n] = t[n] || {}, t[n].emphasis ? i.merge(t[n].emphasis, a[n]) : t[n].emphasis = a[n], a[n] = null)
                  })
                }
                var i = t(Fe),
                  n = ["areaStyle", "lineStyle", "nodeStyle", "linkStyle", "chordStyle", "label", "labelLine"];
                return function (t) {
                  if (t) {
                    e(t), e(t.markPoint), e(t.markLine);
                    var n = t.data;
                    if (n) {
                      for (var r = 0; r < n[ve]; r++) e(n[r]);
                      var a = t.markPoint;
                      if (a && a.data)
                        for (var o = a.data, r = 0; r < o[ve]; r++) e(o[r]);
                      var s = t.markLine;
                      if (s && s.data)
                        for (var l = s.data, r = 0; r < l[ve]; r++) i[y](l[r]) ? (e(l[r][0]), e(l[r][1])) : e(l[r])
                    }
                  }
                }
              }), e("echarts/data/helper/completeDimensions", [Ve, Fe, "../../util/model"], function (t) {
                function e(t, e, r) {
                  function h(t, e, i) {
                    u[e] ? t.otherDims[e] = i : (t.coordDim = e, t.coordDimIndex = i, g.set(e, !0))
                  }

                  function d(t, e, i) {
                    if (i || null != e.get(t)) {
                      for (var n = 0; null != e.get(t + n);) n++;
                      t += n
                    }
                    return e.set(t, !0), t
                  }
                  e = e || [], r = r || {}, t = (t || []).slice();
                  var f = (r.dimsDef || []).slice(),
                    p = n.createHashMap(r.encodeDef),
                    v = n.createHashMap(),
                    g = n.createHashMap(),
                    x = [],
                    _ = r.dimCount;
                  if (null == _) {
                    var b = i(e[0]);
                    _ = Math.max(n[y](b) && b[ve] || 1, t[ve], f[ve]), a(t, function (t) {
                      var e = t.dimsDef;
                      e && (_ = Math.max(_, e[ve]))
                    })
                  }
                  for (var w = 0; _ > w; w++) {
                    var M = o(f[w]) ? {
                        name: f[w]
                      } : f[w] || {},
                      T = M.name,
                      S = x[w] = {
                        otherDims: {}
                      };
                    null != T && null == v.get(T) && (S.name = S.tooltipName = T, v.set(T, w)), null != M.type && (S.type = M.type)
                  }
                  p.each(function (t, e) {
                    t = p.set(e, l(t).slice()), a(t, function (i, n) {
                      o(i) && (i = v.get(i)), null != i && _ > i && (t[n] = i, h(x[i], e, n))
                    })
                  });
                  var P = 0;
                  a(t, function (t) {
                    var e, t, i, r;
                    o(t) ? (e = t, t = {}) : (e = t.name, t = n.clone(t), i = t.dimsDef, r = t.otherDims, t.name = t.coordDim = t.coordDimIndex = t.dimsDef = t.otherDims = null);
                    var u = l(p.get(e));
                    if (!u[ve])
                      for (var c = 0; c < (i && i[ve] || 1); c++) {
                        for (; P < x[ve] && null != x[P].coordDim;) P++;
                        P < x[ve] && u.push(P++)
                      }
                    a(u, function (n, a) {
                      var o = x[n];
                      h(s(o, t), e, a), null == o.name && i && (o.name = o.tooltipName = i[a]), r && s(o.otherDims, r)
                    })
                  });
                  for (var C = r.extraPrefix || "value", A = 0; _ > A; A++) {
                    var S = x[A] = x[A] || {},
                      L = S.coordDim;
                    null == L && (S.coordDim = d(C, g, r.extraFromZero), S.coordDimIndex = 0, S.isExtraCoord = !0), null == S.name && (S.name = d(S.coordDim, v)), null == S.type && c(e, A) && (S.type = m)
                  }
                  return x
                }

                function i(t) {
                  return n[y](t) ? t : n[ie](t) ? t.value : t
                }
                var n = t(Fe),
                  r = t("../../util/model"),
                  a = n.each,
                  o = n[v],
                  s = n[Ee],
                  l = r.normalizeToArray,
                  u = {
                    tooltip: 1,
                    label: 1,
                    itemName: 1
                  },
                  c = e.guessOrdinal = function (t, e) {
                    for (var r = 0, a = t[ve]; a > r; r++) {
                      var s = i(t[r]);
                      if (!n[y](s)) return !1;
                      var s = s[e];
                      if (null != s && isFinite(s)) return !1;
                      if (o(s) && "-" !== s) return !0
                    }
                    return !1
                  };
                return e
              }), e("echarts/data/DataDiffer", [Ve], function () {
                function t(t) {
                  return t
                }

                function e(e, i, n, r) {
                  this._old = e, this._new = i, this._oldKeyGetter = n || t, this._newKeyGetter = r || t
                }

                function i(t, e, i, n) {
                  for (var r = 0; r < t[ve]; r++) {
                    var a = "_ec_" + n(t[r], r),
                      o = e[a];
                    null == o ? (i.push(a), e[a] = r) : (o[ve] || (e[a] = o = [o]), o.push(r))
                  }
                }
                return e[ye] = {
                  constructor: e,
                  add: function (t) {
                    return this._add = t, this
                  },
                  update: function (t) {
                    return this._update = t, this
                  },
                  remove: function (t) {
                    return this._remove = t, this
                  },
                  execute: function () {
                    var t, e = this._old,
                      n = this._new,
                      r = this._oldKeyGetter,
                      a = this._newKeyGetter,
                      o = {},
                      s = {},
                      l = [],
                      u = [];
                    for (i(e, o, l, r), i(n, s, u, a), t = 0; t < e[ve]; t++) {
                      var c = l[t],
                        h = s[c];
                      if (null != h) {
                        var d = h[ve];
                        d ? (1 === d && (s[c] = null), h = h.unshift()) : s[c] = null, this._update && this._update(h, t)
                      } else this._remove && this._remove(t)
                    }
                    for (var t = 0; t < u[ve]; t++) {
                      var c = u[t];
                      if (s.hasOwnProperty(c)) {
                        var h = s[c];
                        if (null == h) continue;
                        if (h[ve])
                          for (var f = 0, d = h[ve]; d > f; f++) this._add && this._add(h[f]);
                        else this._add && this._add(h)
                      }
                    }
                  }
                }, e
              }), e("echarts/util/symbol", [Ve, "./graphic", "zrender/core/BoundingRect"], function (t) {
                var e = t("./graphic"),
                  i = t("zrender/core/BoundingRect"),
                  n = e.extendShape({
                    type: "triangle",
                    shape: {
                      cx: 0,
                      cy: 0,
                      width: 0,
                      height: 0
                    },
                    buildPath: function (t, e) {
                      var i = e.cx,
                        n = e.cy,
                        r = e.width / 2,
                        a = e[Le] / 2;
                      t[l](i, n - a), t.lineTo(i + r, n + a), t.lineTo(i - r, n + a), t.closePath()
                    }
                  }),
                  r = e.extendShape({
                    type: "diamond",
                    shape: {
                      cx: 0,
                      cy: 0,
                      width: 0,
                      height: 0
                    },
                    buildPath: function (t, e) {
                      var i = e.cx,
                        n = e.cy,
                        r = e.width / 2,
                        a = e[Le] / 2;
                      t[l](i, n - a), t.lineTo(i + r, n), t.lineTo(i, n + a), t.lineTo(i - r, n), t.closePath()
                    }
                  }),
                  a = e.extendShape({
                    type: "pin",
                    shape: {
                      x: 0,
                      y: 0,
                      width: 0,
                      height: 0
                    },
                    buildPath: function (t, e) {
                      var i = e.x,
                        n = e.y,
                        r = e.width / 5 * 3,
                        a = Math.max(r, e[Le]),
                        o = r / 2,
                        s = o * o / (a - o),
                        l = n - a + o + s,
                        u = Math.asin(s / o),
                        c = Math.cos(u) * o,
                        h = Math.sin(u),
                        d = Math.cos(u);
                      t.arc(i, l, o, Math.PI - u, 2 * Math.PI + u);
                      var f = .6 * o,
                        p = .7 * o;
                      t.bezierCurveTo(i + c - h * f, l + s + d * f, i, n - p, i, n), t.bezierCurveTo(i, n - p, i - c + h * f, l + s + d * f, i - c, l + s), t.closePath()
                    }
                  }),
                  o = e.extendShape({
                    type: "arrow",
                    shape: {
                      x: 0,
                      y: 0,
                      width: 0,
                      height: 0
                    },
                    buildPath: function (t, e) {
                      var i = e[Le],
                        n = e.width,
                        r = e.x,
                        a = e.y,
                        o = n / 3 * 2;
                      t[l](r, a), t.lineTo(r + o, a + i), t.lineTo(r, a + i / 4 * 3), t.lineTo(r - o, a + i), t.lineTo(r, a), t.closePath()
                    }
                  }),
                  s = {
                    line: e.Line,
                    rect: e.Rect,
                    roundRect: e.Rect,
                    square: e.Rect,
                    circle: e.Circle,
                    diamond: r,
                    pin: a,
                    arrow: o,
                    triangle: n
                  },
                  u = {
                    line: function (t, e, i, n, r) {
                      r.x1 = t, r.y1 = e + n / 2, r.x2 = t + i, r.y2 = e + n / 2
                    },
                    rect: function (t, e, i, n, r) {
                      r.x = t, r.y = e, r.width = i, r[Le] = n
                    },
                    roundRect: function (t, e, i, n, r) {
                      r.x = t, r.y = e, r.width = i, r[Le] = n, r.r = Math.min(i, n) / 4
                    },
                    square: function (t, e, i, n, r) {
                      var a = Math.min(i, n);
                      r.x = t, r.y = e, r.width = a, r[Le] = a
                    },
                    circle: function (t, e, i, n, r) {
                      r.cx = t + i / 2, r.cy = e + n / 2, r.r = Math.min(i, n) / 2
                    },
                    diamond: function (t, e, i, n, r) {
                      r.cx = t + i / 2, r.cy = e + n / 2, r.width = i, r[Le] = n
                    },
                    pin: function (t, e, i, n, r) {
                      r.x = t + i / 2, r.y = e + n / 2, r.width = i, r[Le] = n
                    },
                    arrow: function (t, e, i, n, r) {
                      r.x = t + i / 2, r.y = e + n / 2, r.width = i, r[Le] = n
                    },
                    triangle: function (t, e, i, n, r) {
                      r.cx = t + i / 2, r.cy = e + n / 2, r.width = i, r[Le] = n
                    }
                  },
                  c = {};
                for (var h in s) s.hasOwnProperty(h) && (c[h] = new s[h]);
                var f = e.extendShape({
                    type: "symbol",
                    shape: {
                      symbolType: "",
                      x: 0,
                      y: 0,
                      width: 0,
                      height: 0
                    },
                    beforeBrush: function () {
                      var t = this.style,
                        e = this.shape;
                      "pin" === e.symbolType && "inside" === t.textPosition && (t.textPosition = ["50%", "40%"], t[ze] = Me, t.textVerticalAlign = Te)
                    },
                    buildPath: function (t, e, i) {
                      var n = e.symbolType,
                        r = c[n];
                      "none" !== e.symbolType && (r || (n = "rect", r = c[n]), u[n](e.x, e.y, e.width, e[Le], r.shape), r.buildPath(t, r.shape, i))
                    }
                  }),
                  p = function (t) {
                    if ("image" !== this.type) {
                      var e = this.style,
                        i = this.shape;
                      i && "line" === i.symbolType ? e[d] = t : this.__isEmptyBrush ? (e[d] = t, e.fill = "#fff") : (e.fill && (e.fill = t), e[d] && (e[d] = t)), this.dirty(!1)
                    }
                  },
                  m = {
                    createSymbol: function (t, n, r, a, o, s) {
                      var l = 0 === t[ce]("empty");
                      l && (t = t.substr(5, 1)[z]() + t.substr(6));
                      var u;
                      return u = 0 === t[ce]("image://") ? new e.Image({
                        style: {
                          image: t.slice(8),
                          x: n,
                          y: r,
                          width: a,
                          height: o
                        }
                      }) : 0 === t[ce]("path://") ? e.makePath(t.slice(7), {}, new i(n, r, a, o)) : new f({
                        shape: {
                          symbolType: t,
                          x: n,
                          y: r,
                          width: a,
                          height: o
                        }
                      }), u.__isEmptyBrush = l, u.setColor = p, u.setColor(s), u
                    }
                  };
                return m
              }), e("echarts/chart/bar/barItemStyle", [Ve, "../../model/mixin/makeStyleMapper"], function (t) {
                var e = t("../../model/mixin/makeStyleMapper")([
                  ["fill", "color"],
                  [d, "borderColor"],
                  [f, "borderWidth"],
                  [d, "barBorderColor"],
                  [f, "barBorderWidth"],
                  [xe],
                  [r],
                  [n],
                  [i],
                  ["shadowColor"]
                ]);
                return {
                  getBarItemStyle: function (t) {
                    var i = e.call(this, t);
                    if (this.getBorderLineDash) {
                      var n = this.getBorderLineDash();
                      n && (i.lineDash = n)
                    }
                    return i
                  }
                }
              }), e("echarts/chart/bar/helper", [Ve, Fe, Z], function (t) {
                function e(t, e, i, r, a) {
                  n.setText(t, e, i), t.text = r, "outside" === t.textPosition && (t.textPosition = a)
                }
                var i = t(Fe),
                  n = t(Z),
                  r = {};
                return r.setLabel = function (t, n, r, a, o, s, l) {
                  var u = r[Oe]("label.normal"),
                    c = r[Oe]("label.emphasis");
                  u.get("show") ? e(t, u, a, i[Y](o.getFormattedLabel(s, U), o.getRawValue(s)), l) : t.text = "", c.get("show") ? e(n, c, a, i[Y](o.getFormattedLabel(s, "emphasis"), o.getRawValue(s)), l) : n.text = ""
                }, r
              }), e("echarts/chart/helper/SymbolDraw", [Ve, Z, "./Symbol"], function (t) {
                function e(t) {
                  this.group = new n.Group, this._symbolCtor = t || r
                }

                function i(t, e, i) {
                  var n = t.getItemLayout(e);
                  return !(!n || isNaN(n[0]) || isNaN(n[1]) || i && i(e) || "none" === t[B](e, "symbol"))
                }
                var n = t(Z),
                  r = t("./Symbol"),
                  a = e[ye];
                return a.updateData = function (t, e) {
                  var r = this.group,
                    a = t.hostModel,
                    o = this._data,
                    s = this._symbolCtor,
                    l = {
                      itemStyle: a[Oe]("itemStyle.normal").getItemStyle(["color"]),
                      hoverItemStyle: a[Oe]("itemStyle.emphasis").getItemStyle(),
                      symbolRotate: a.get("symbolRotate"),
                      symbolOffset: a.get("symbolOffset"),
                      hoverAnimation: a.get("hoverAnimation"),
                      labelModel: a[Oe]("label.normal"),
                      hoverLabelModel: a[Oe]("label.emphasis"),
                      cursorStyle: a.get("cursor")
                    };
                  t.diff(o).add(function (n) {
                    var a = t.getItemLayout(n);
                    if (i(t, n, e)) {
                      var o = new s(t, n, l);
                      o.attr(be, a), t.setItemGraphicEl(n, o), r.add(o)
                    }
                  })[ae](function (u, c) {
                    var h = o[G](c),
                      d = t.getItemLayout(u);
                    return i(t, u, e) ? (h ? (h.updateData(t, u, l), n.updateProps(h, {
                      position: d
                    }, a)) : (h = new s(t, u), h.attr(be, d)), r.add(h), void t.setItemGraphicEl(u, h)) : void r[W](h)
                  })[W](function (t) {
                    var e = o[G](t);
                    e && e.fadeOut(function () {
                      r[W](e)
                    })
                  }).execute(), this._data = t
                }, a.updateLayout = function () {
                  var t = this._data;
                  t && t[V](function (e, i) {
                    var n = t.getItemLayout(i);
                    e.attr(be, n)
                  })
                }, a[W] = function (t) {
                  var e = this.group,
                    i = this._data;
                  i && (t ? i[V](function (t) {
                    t.fadeOut(function () {
                      e[W](t)
                    })
                  }) : e[Be]())
                }, e
              }), e("echarts/chart/helper/Symbol", [Ve, Fe, "../../util/symbol", Z, "../../util/number", "./labelHelper"], function (t) {
                function e(t, e) {
                  var i = t[B](e, "symbolSize");
                  return i instanceof Array ? i.slice() : [+i, +i]
                }

                function i(t) {
                  return [t[0] / 2, t[1] / 2]
                }

                function n(t, e, i) {
                  s.Group.call(this), this.updateData(t, e, i)
                }

                function r(t, e) {
                  this[N].drift(t, e)
                }
                var a = t(Fe),
                  o = t("../../util/symbol"),
                  s = t(Z),
                  l = t("../../util/number"),
                  u = t("./labelHelper"),
                  c = n[ye];
                c._createSymbol = function (t, e, n, a) {
                  this[Be]();
                  var l = e.hostModel,
                    u = e[B](n, "color"),
                    c = o.createSymbol(t, -1, -1, 2, 2, u);
                  c.attr({
                    z2: 100,
                    culling: !0,
                    scale: [0, 0]
                  }), c.drift = r, s.initProps(c, {
                    scale: i(a)
                  }, l, n), this._symbolType = t, this.add(c)
                }, c.stopSymbolAnimation = function (t) {
                  this.childAt(0).stopAnimation(t)
                }, c.getSymbolPath = function () {
                  return this.childAt(0)
                }, c.getScale = function () {
                  return this.childAt(0).scale
                }, c.highlight = function () {
                  this.childAt(0)[S]("emphasis")
                }, c.downplay = function () {
                  this.childAt(0)[S](U)
                }, c.setZ = function (t, e) {
                  var i = this.childAt(0);
                  i[_] = t, i.z = e
                }, c.setDraggable = function (t) {
                  var e = this.childAt(0);
                  e.draggable = t, e.cursor = t ? "move" : "pointer"
                }, c.updateData = function (t, n, r) {
                  this[Ae] = !1;
                  var a = t[B](n, "symbol") || "circle",
                    o = t.hostModel,
                    l = e(t, n);
                  if (a !== this._symbolType) this._createSymbol(a, t, n, l);
                  else {
                    var u = this.childAt(0);
                    u[Ae] = !1, s.updateProps(u, {
                      scale: i(l)
                    }, o, n)
                  }
                  this._updateCommon(t, n, l, r), this._seriesModel = o
                };
                var d = ["itemStyle", U],
                  f = ["itemStyle", "emphasis"],
                  p = ["label", U],
                  m = ["label", "emphasis"];
                return c._updateCommon = function (t, e, n, r) {
                  var o = this.childAt(0),
                    c = t.hostModel,
                    v = t[B](e, "color");
                  "image" !== o.type && o.useStyle({
                    strokeNoScale: !0
                  }), r = r || null;
                  var g = r && r.itemStyle,
                    y = r && r.hoverItemStyle,
                    x = r && r.symbolRotate,
                    _ = r && r.symbolOffset,
                    b = r && r.labelModel,
                    w = r && r.hoverLabelModel,
                    M = r && r.hoverAnimation,
                    T = r && r.cursorStyle;
                  if (!r || t.hasItemOption) {
                    var S = t[q](e);
                    g = S[Oe](d).getItemStyle(["color"]), y = S[Oe](f).getItemStyle(), x = S[R]("symbolRotate"), _ = S[R]("symbolOffset"), b = S[Oe](p), w = S[Oe](m), M = S[R]("hoverAnimation"), T = S[R]("cursor")
                  } else y = a[ge]({}, y);
                  var P = o.style;
                  o.attr(h, (x || 0) * Math.PI / 180 || 0), _ && o.attr(be, [l.parsePercent(_[0], n[0]), l.parsePercent(_[1], n[1])]), T && o.attr("cursor", T), o.setColor(v), o[_e](g);
                  var C = t[B](e, xe);
                  null != C && (P[xe] = C);
                  var A = u.findLabelValueDim(t);
                  u.setTextToStyle(t, e, A, P, c, b, v), u.setTextToStyle(t, e, A, y, c, w, v), o.off("mouseover").off("mouseout").off("emphasis").off(U), o.hoverStyle = y, s.setHoverStyle(o);
                  var L = i(n);
                  if (M && c.isAnimationEnabled()) {
                    var k = function () {
                        var t = L[1] / L[0];
                        this.animateTo({
                          scale: [Math.max(1.1 * L[0], L[0] + 3), Math.max(1.1 * L[1], L[1] + 3 * t)]
                        }, 400, "elasticOut")
                      },
                      I = function () {
                        this.animateTo({
                          scale: L
                        }, 400, "elasticOut")
                      };
                    o.on("mouseover", k).on("mouseout", I).on("emphasis", k).on(U, I)
                  }
                }, c.fadeOut = function (t) {
                  var e = this.childAt(0);
                  this[Ae] = e[Ae] = !0, e.style.text = "", s.updateProps(e, {
                    scale: [0, 0]
                  }, this._seriesModel, this[F], t)
                }, a[g](n, s.Group), n
              }), e("echarts/chart/line/lineAnimationDiff", [Ve], function () {
                function t(t) {
                  return t >= 0 ? 1 : -1
                }

                function e(e, i, n) {
                  for (var r, a = e.getBaseAxis(), o = e.getOtherAxis(a), s = a.onZero ? 0 : o.scale[fe]()[0], l = o.dim, u = "x" === l || "radius" === l ? 1 : 0, c = i.stackedOn, h = i.get(l, n); c && t(c.get(l, n)) === t(h);) {
                    r = c;
                    break
                  }
                  var d = [];
                  return d[u] = i.get(a.dim, n), d[1 - u] = r ? r.get(l, n, !0) : s, e[ee](d)
                }

                function i(t, e) {
                  var i = [];
                  return e.diff(t).add(function (t) {
                    i.push({
                      cmd: "+",
                      idx: t
                    })
                  })[ae](function (t, e) {
                    i.push({
                      cmd: "=",
                      idx: e,
                      idx1: t
                    })
                  })[W](function (t) {
                    i.push({
                      cmd: "-",
                      idx: t
                    })
                  }).execute(), i
                }
                return function (t, n, r, a, o, s) {
                  for (var l = i(t, n), u = [], c = [], h = [], d = [], f = [], p = [], m = [], v = s[X], g = 0; g < l[ve]; g++) {
                    var y = l[g],
                      x = !0;
                    switch (y.cmd) {
                      case "=":
                        var _ = t.getItemLayout(y.idx),
                          b = n.getItemLayout(y.idx1);
                        (isNaN(_[0]) || isNaN(_[1])) && (_ = b.slice()), u.push(_), c.push(b), h.push(r[y.idx]), d.push(a[y.idx1]), m.push(n.getRawIndex(y.idx1));
                        break;
                      case "+":
                        var w = y.idx;
                        u.push(o[ee]([n.get(v[0], w, !0), n.get(v[1], w, !0)])), c.push(n.getItemLayout(w).slice()), h.push(e(o, n, w)), d.push(a[w]), m.push(n.getRawIndex(w));
                        break;
                      case "-":
                        var w = y.idx,
                          M = t.getRawIndex(w);
                        M !== w ? (u.push(t.getItemLayout(w)), c.push(s[ee]([t.get(v[0], w, !0), t.get(v[1], w, !0)])), h.push(r[w]), d.push(e(s, t, w)), m.push(M)) : x = !1
                    }
                    x && (f.push(y), p.push(p[ve]))
                  }
                  p.sort(function (t, e) {
                    return m[t] - m[e]
                  });
                  for (var T = [], S = [], P = [], C = [], A = [], g = 0; g < p[ve]; g++) {
                    var w = p[g];
                    T[g] = u[w], S[g] = c[w], P[g] = h[w], C[g] = d[w], A[g] = f[w]
                  }
                  return {
                    current: T,
                    next: S,
                    stackedOnCurrent: P,
                    stackedOnNext: C,
                    status: A
                  }
                }
              }), e("echarts/chart/line/poly", [Ve, "zrender/graphic/Path", "zrender/core/vector"], function (t) {
                function e(t) {
                  return isNaN(t[0]) || isNaN(t[1])
                }

                function i(t, i, n, r, p, m, v, g, y, x, _) {
                  for (var b = 0, w = n, M = 0; r > M; M++) {
                    var T = i[w];
                    if (w >= p || 0 > w) break;
                    if (e(T)) {
                      if (_) {
                        w += m;
                        continue
                      }
                      break
                    }
                    if (w === n) t[m > 0 ? l : "lineTo"](T[0], T[1]), c(d, T);
                    else if (y > 0) {
                      var S = w + m,
                        P = i[S];
                      if (_)
                        for (; P && e(i[S]);) S += m, P = i[S];
                      var C = .5,
                        A = i[b],
                        P = i[S];
                      if (!P || e(P)) c(f, T);
                      else {
                        e(P) && !_ && (P = T), a.sub(h, P, A);
                        var L, k;
                        if ("x" === x || "y" === x) {
                          var I = "x" === x ? 0 : 1;
                          L = Math.abs(T[I] - A[I]), k = Math.abs(T[I] - P[I])
                        } else L = a.dist(T, A), k = a.dist(T, P);
                        C = k / (k + L), u(f, T, h, -y * (1 - C))
                      }
                      o(d, d, g), s(d, d, v), o(f, f, g), s(f, f, v), t.bezierCurveTo(d[0], d[1], f[0], f[1], T[0], T[1]), u(d, T, h, y * C)
                    } else t.lineTo(T[0], T[1]);
                    b = w, w += m
                  }
                  return M
                }

                function n(t, e) {
                  var i = [1 / 0, 1 / 0],
                    n = [-1 / 0, -1 / 0];
                  if (e)
                    for (var r = 0; r < t[ve]; r++) {
                      var a = t[r];
                      a[0] < i[0] && (i[0] = a[0]), a[1] < i[1] && (i[1] = a[1]), a[0] > n[0] && (n[0] = a[0]), a[1] > n[1] && (n[1] = a[1])
                    }
                  return {
                    min: e ? i : n,
                    max: e ? n : i
                  }
                }
                var r = t("zrender/graphic/Path"),
                  a = t("zrender/core/vector"),
                  o = a.min,
                  s = a.max,
                  u = a.scaleAndAdd,
                  c = a.copy,
                  h = [],
                  d = [],
                  f = [];
                return {
                  Polyline: r[ge]({
                    type: "ec-polyline",
                    shape: {
                      points: [],
                      smooth: 0,
                      smoothConstraint: !0,
                      smoothMonotone: null,
                      connectNulls: !1
                    },
                    style: {
                      fill: null,
                      stroke: "#000"
                    },
                    buildPath: function (t, r) {
                      var a = r.points,
                        o = 0,
                        s = a[ve],
                        l = n(a, r.smoothConstraint);
                      if (r.connectNulls) {
                        for (; s > 0 && e(a[s - 1]); s--);
                        for (; s > o && e(a[o]); o++);
                      }
                      for (; s > o;) o += i(t, a, o, s, s, 1, l.min, l.max, r.smooth, r.smoothMonotone, r.connectNulls) + 1
                    }
                  }),
                  Polygon: r[ge]({
                    type: "ec-polygon",
                    shape: {
                      points: [],
                      stackedOnPoints: [],
                      smooth: 0,
                      stackedOnSmooth: 0,
                      smoothConstraint: !0,
                      smoothMonotone: null,
                      connectNulls: !1
                    },
                    buildPath: function (t, r) {
                      var a = r.points,
                        o = r.stackedOnPoints,
                        s = 0,
                        l = a[ve],
                        u = r.smoothMonotone,
                        c = n(a, r.smoothConstraint),
                        h = n(o, r.smoothConstraint);
                      if (r.connectNulls) {
                        for (; l > 0 && e(a[l - 1]); l--);
                        for (; l > s && e(a[s]); s++);
                      }
                      for (; l > s;) {
                        var d = i(t, a, s, l, l, 1, c.min, c.max, r.smooth, u, r.connectNulls);
                        i(t, o, s + d - 1, d, l, -1, h.min, h.max, r.stackedOnSmooth, u, r.connectNulls), s += d + 1, t.closePath()
                      }
                    }
                  })
                }
              }), e("echarts/component/axis/CartesianAxisView", [Ve, Fe, Z, "./AxisBuilder", "./AxisView", "./cartesianAxisHelper"], function (t) {
                var e = t(Fe),
                  i = t(Z),
                  n = t("./AxisBuilder"),
                  r = t("./AxisView"),
                  a = t("./cartesianAxisHelper"),
                  o = n.ifIgnoreOnTick,
                  s = n.getInterval,
                  l = ["axisLine", "axisLabel", "axisTick", "axisName"],
                  u = ["splitArea", "splitLine"],
                  c = r[ge]({
                    type: "cartesianAxis",
                    axisPointerClass: "CartesianAxisPointer",
                    render: function (t, r, o, s) {
                      this.group[Be]();
                      var h = this._axisGroup;
                      if (this._axisGroup = new i.Group, this.group.add(this._axisGroup), t.get("show")) {
                        var d = t.getCoordSysModel(),
                          f = a.layout(d, t),
                          p = new n(t, f);
                        e.each(l, p.add, p), this._axisGroup.add(p.getGroup()), e.each(u, function (e) {
                          t.get(e + ".show") && this["_" + e](t, d, f.labelInterval)
                        }, this), i.groupTransition(h, this._axisGroup, t), c.superCall(this, "render", t, r, o, s)
                      }
                    },
                    _splitLine: function (t, n, r) {
                      var a = t.axis;
                      if (!a.scale.isBlank()) {
                        var l = t[Oe]("splitLine"),
                          u = l[Oe]("lineStyle"),
                          c = u.get("color"),
                          h = s(l, r);
                        c = e[y](c) ? c : [c];
                        for (var d = n[Re].getRect(), f = a.isHorizontal(), p = 0, m = a.getTicksCoords(), v = a.scale.getTicks(), g = [], x = [], _ = u.getLineStyle(), b = 0; b < m[ve]; b++)
                          if (!o(a, b, h)) {
                            var w = a[te](m[b]);
                            f ? (g[0] = w, g[1] = d.y, x[0] = w, x[1] = d.y + d[Le]) : (g[0] = d.x, g[1] = w, x[0] = d.x + d.width, x[1] = w);
                            var M = p++ % c[ve];
                            this._axisGroup.add(new i.Line(i.subPixelOptimizeLine({
                              anid: "line_" + v[b],
                              shape: {
                                x1: g[0],
                                y1: g[1],
                                x2: x[0],
                                y2: x[1]
                              },
                              style: e[Ee]({
                                stroke: c[M]
                              }, _),
                              silent: !0
                            })))
                          }
                      }
                    },
                    _splitArea: function (t, n, r) {
                      var a = t.axis;
                      if (!a.scale.isBlank()) {
                        var l = t[Oe]("splitArea"),
                          u = l[Oe]("areaStyle"),
                          c = u.get("color"),
                          h = n[Re].getRect(),
                          d = a.getTicksCoords(),
                          f = a.scale.getTicks(),
                          p = a[te](d[0]),
                          m = a[te](d[0]),
                          v = 0,
                          g = s(l, r),
                          x = u.getAreaStyle();
                        c = e[y](c) ? c : [c];
                        for (var _ = 1; _ < d[ve]; _++)
                          if (!o(a, _, g)) {
                            var b, w, M, T, S = a[te](d[_]);
                            a.isHorizontal() ? (b = p, w = h.y, M = S - b, T = h[Le]) : (b = h.x, w = m, M = h.width, T = S - w);
                            var P = v++ % c[ve];
                            this._axisGroup.add(new i.Rect({
                              anid: "area_" + f[_],
                              shape: {
                                x: b,
                                y: w,
                                width: M,
                                height: T
                              },
                              style: e[Ee]({
                                fill: c[P]
                              }, x),
                              silent: !0
                            })), p = b + M, m = w + T
                          }
                      }
                    }
                  });
                c[ge]({
                  type: "xAxis"
                }), c[ge]({
                  type: "yAxis"
                })
              }), e("echarts/component/helper/listComponent", [Ve, "../../util/layout", "../../util/format", Z], function (t) {
                function e(t, e, n) {
                  i.positionElement(t, e.getBoxLayoutParams(), {
                    width: n[Pe](),
                    height: n[Se]()
                  }, e.get("padding"))
                }
                var i = t("../../util/layout"),
                  n = t("../../util/format"),
                  r = t(Z);
                return {
                  layout: function (t, n, r) {
                    var a = i.getLayoutRect(n.getBoxLayoutParams(), {
                      width: r[Pe](),
                      height: r[Se]()
                    }, n.get("padding"));
                    i.box(n.get("orient"), t, n.get("itemGap"), a.width, a[Le]), e(t, n, r)
                  },
                  addBackground: function (t, e) {
                    var i = n.normalizeCssArray(e.get("padding")),
                      a = t[ke](),
                      o = e.getItemStyle(["color", xe]);
                    o.fill = e.get("backgroundColor");
                    var s = new r.Rect({
                      shape: {
                        x: a.x - i[3],
                        y: a.y - i[0],
                        width: a.width + i[1] + i[3],
                        height: a[Le] + i[0] + i[2]
                      },
                      style: o,
                      silent: !0,
                      z2: -1
                    });
                    r.subPixelOptimizeRect(s), t.add(s)
                  }
                }
              }), e("echarts/component/axisPointer/findPointFromSeries", [Ve, Fe, "../../util/model"], function (t) {
                var e = t(Fe),
                  i = t("../../util/model");
                return function (t, n) {
                  var r, a = [],
                    o = t[E];
                  if (null == o || !(r = n.getSeriesByIndex(o))) return {
                    point: []
                  };
                  var s = r[Ne](),
                    l = i.queryDataIndex(s, t);
                  if (null == l || e[y](l)) return {
                    point: []
                  };
                  var c = s[G](l),
                    h = r[Re];
                  if (r.getTooltipPosition) a = r.getTooltipPosition(l) || [];
                  else if (h && h[ee]) a = h[ee](s.getValues(e.map(h[X], function (t) {
                    return r[$](t)[0]
                  }), l, !0)) || [];
                  else if (c) {
                    var d = c[ke]().clone();
                    d[p](c[u]), a = [d.x + d.width / 2, d.y + d[Le] / 2]
                  }
                  return {
                    point: a,
                    el: c
                  }
                }
              }), e("echarts/component/marker/markerHelper", [Ve, Fe, "../../util/number"], function (t) {
                function e(t) {
                  return !(isNaN(parseFloat(t.x)) && isNaN(parseFloat(t.y)))
                }

                function i(t) {
                  return !isNaN(parseFloat(t.x)) && !isNaN(parseFloat(t.y))
                }

                function n(t, e, i) {
                  var n = -1;
                  do n = Math.max(o.getPrecision(t.get(e, i)), n), t = t.stackedOn; while (t);
                  return n
                }

                function r(t, e, i, r, a, o) {
                  var s = [],
                    l = p(e, r, t),
                    u = e.indicesOfNearest(r, l, !0)[0];
                  s[a] = e.get(i, u, !0), s[o] = e.get(r, u, !0);
                  var c = n(e, r, u);
                  return c >= 0 && (s[o] = +s[o].toFixed(c)), s
                }
                var a = t(Fe),
                  o = t("../../util/number"),
                  s = a[ce],
                  l = a.curry,
                  u = {
                    min: l(r, "min"),
                    max: l(r, "max"),
                    average: l(r, "average")
                  },
                  c = function (t, e) {
                    var n = t[Ne](),
                      r = t[Re];
                    if (e && !i(e) && !a[y](e.coord) && r) {
                      var o = r[X],
                        l = h(e, n, r, t);
                      if (e = a.clone(e), e.type && u[e.type] && l.baseAxis && l.valueAxis) {
                        var c = s(o, l.baseAxis.dim),
                          d = s(o, l.valueAxis.dim);
                        e.coord = u[e.type](n, l.baseDataDim, l.valueDataDim, c, d), e.value = e.coord[d]
                      } else {
                        for (var f = [null != e.xAxis ? e.xAxis : e.radiusAxis, null != e.yAxis ? e.yAxis : e.angleAxis], m = 0; 2 > m; m++)
                          if (u[f[m]]) {
                            var v = t[$](o[m])[0];
                            f[m] = p(n, v, f[m])
                          } e.coord = f
                      }
                    }
                    return e
                  },
                  h = function (t, e, i, n) {
                    var r = {};
                    return null != t.valueIndex || null != t.valueDim ? (r.valueDataDim = null != t.valueIndex ? e.getDimension(t.valueIndex) : t.valueDim, r.valueAxis = i[ne](n.dataDimToCoordDim(r.valueDataDim)), r.baseAxis = i.getOtherAxis(r.valueAxis), r.baseDataDim = n[$](r.baseAxis.dim)[0]) : (r.baseAxis = n.getBaseAxis(), r.valueAxis = i.getOtherAxis(r.baseAxis), r.baseDataDim = n[$](r.baseAxis.dim)[0], r.valueDataDim = n[$](r.valueAxis.dim)[0]), r
                  },
                  d = function (t, i) {
                    return t && t.containData && i.coord && !e(i) ? t.containData(i.coord) : !0
                  },
                  f = function (t, e, i, n) {
                    return 2 > n ? t.coord && t.coord[n] : t.value
                  },
                  p = function (t, e, i) {
                    if ("average" === i) {
                      var n = 0,
                        r = 0;
                      return t.each(e, function (t) {
                        isNaN(t) || (n += t, r++)
                      }, !0), n / r
                    }
                    return t.getDataExtent(e, !0)["max" === i ? 1 : 0]
                  };
                return {
                  dataTransform: c,
                  dataFilter: d,
                  dimValueGetter: f,
                  getAxisInfo: h,
                  numCalculate: p
                }
              }), e("echarts/component/marker/MarkerView", [Ve, Fe, "../../echarts"], function (t) {
                var e = t(Fe);
                return t("../../echarts").extendComponentView({
                  type: "marker",
                  init: function () {
                    this.markerGroupMap = e.createHashMap()
                  },
                  render: function (t, e, i) {
                    var n = this.markerGroupMap;
                    n.each(function (t) {
                      t.__keep = !1
                    });
                    var r = this.type + "Model";
                    e[K](function (t) {
                      var n = t[r];
                      n && this.renderSeries(t, n, e, i)
                    }, this), n.each(function (t) {
                      !t.__keep && this.group[W](t.group)
                    }, this)
                  },
                  renderSeries: function () {}
                })
              }), e("echarts/chart/helper/labelHelper", [Ve, Z, Fe, "../../util/model"], function (t) {
                var e = t(Z),
                  i = t(Fe),
                  n = t("../../util/model"),
                  r = {};
                return r.findLabelValueDim = function (t) {
                  var e, i = n.otherDimToDataDim(t, "label");
                  if (i[ve]) e = i[0];
                  else
                    for (var r, a = t[X].slice(); a[ve] && (e = a.pop(), r = t.getDimensionInfo(e).type, r === m || "time" === r););
                  return e
                }, r.setTextToStyle = function (t, n, r, a, o, s, l) {
                  null != r && s[R]("show") ? (e.setText(a, s, l), a.text = i[Y](o.getFormattedLabel(n, U), t.get(r, n))) : a.text = ""
                }, r
              }), e("echarts/component/axis/AxisBuilder", [Ve, Fe, "../../util/format", Z, "../../model/Model", "../../util/number", "zrender/core/vector", "zrender/core/matrix"], function (t) {
                function e(t) {
                  var e = {
                    componentType: t.mainType
                  };
                  return e[t.mainType + "Index"] = t[Q], e
                }

                function i(t, e, i, n) {
                  var r, a, o = f(i - t[h]),
                    s = n[0] > n[1],
                    l = "start" === e && !s || "start" !== e && s;
                  return v(o - b / 2) ? (a = l ? we : "top", r = Me) : v(o - 1.5 * b) ? (a = l ? "top" : we, r = Me) : (a = Te, r = 1.5 * b > o && o > b / 2 ? l ? "left" : "right" : l ? "right" : "left"), {
                    rotation: o,
                    textAlign: r,
                    textVerticalAlign: a
                  }
                }

                function n(t) {
                  var e = t.get("tooltip");
                  return t.get(Ae) || !(t.get("triggerEvent") || e && e.show)
                }

                function r(t, e) {
                  var i = t.get("axisLabel.showMinLabel"),
                    n = t.get("axisLabel.showMaxLabel"),
                    r = e[0],
                    o = e[1],
                    s = e[e[ve] - 1],
                    l = e[e[ve] - 2];
                  i === !1 ? r[k] = !0 : null != t.getMin() && a(r, o) && (i ? o[k] = !0 : r[k] = !0), n === !1 ? s[k] = !0 : null != t.getMax() && a(l, s) && (n ? l[k] = !0 : s[k] = !0)
                }

                function a(t, e) {
                  var i = t && t[ke]().clone(),
                    n = e && e[ke]().clone();
                  if (i && n) {
                    var r = y.identity([]);
                    return y.rotate(r, r, -t[h]), i[p](y.mul([], r, t.getLocalTransform())), n[p](y.mul([], r, e.getLocalTransform())), i.intersect(n)
                  }
                }
                var o = t(Fe),
                  s = t("../../util/format"),
                  l = t(Z),
                  c = t("../../model/Model"),
                  d = t("../../util/number"),
                  f = d.remRadian,
                  v = d.isRadianAroundZero,
                  g = t("zrender/core/vector"),
                  y = t("zrender/core/matrix"),
                  x = g[p],
                  _ = o[Y],
                  b = Math.PI,
                  w = function (t, e) {
                    this.opt = e, this.axisModel = t, o[Ee](e, {
                      labelOffset: 0,
                      nameDirection: 1,
                      tickDirection: 1,
                      labelDirection: 1,
                      silent: !0
                    }), this.group = new l.Group;
                    var i = new l.Group({
                      position: e[be].slice(),
                      rotation: e[h]
                    });
                    i.updateTransform(), this._transform = i[u], this._dumbGroup = i
                  };
                w[ye] = {
                  constructor: w,
                  hasBuilder: function (t) {
                    return !!M[t]
                  },
                  add: function (t) {
                    M[t].call(this)
                  },
                  getGroup: function () {
                    return this.group
                  }
                };
                var M = {
                    axisLine: function () {
                      var t = this.opt,
                        e = this.axisModel;
                      if (e.get("axisLine.show")) {
                        var i = this.axisModel.axis[fe](),
                          n = this._transform,
                          r = [i[0], 0],
                          a = [i[1], 0];
                        n && (x(r, r, n), x(a, a, n)), this.group.add(new l.Line(l.subPixelOptimizeLine({
                          anid: "line",
                          shape: {
                            x1: r[0],
                            y1: r[1],
                            x2: a[0],
                            y2: a[1]
                          },
                          style: o[ge]({
                            lineCap: "round"
                          }, e[Oe]("axisLine.lineStyle").getLineStyle()),
                          strokeContainThreshold: t.strokeContainThreshold || 5,
                          silent: !0,
                          z2: 1
                        })))
                      }
                    },
                    axisTick: function () {
                      var t = this.axisModel,
                        e = t.axis;
                      if (t.get("axisTick.show") && !e.scale.isBlank())
                        for (var i = t[Oe]("axisTick"), n = this.opt, r = i[Oe]("lineStyle"), a = i.get(ve), s = P(i, n.labelInterval), u = e.getTicksCoords(i.get("alignWithLabel")), c = e.scale.getTicks(), h = [], d = [], f = this._transform, p = 0; p < u[ve]; p++)
                          if (!S(e, p, s)) {
                            var m = u[p];
                            h[0] = m, h[1] = 0, d[0] = m, d[1] = n.tickDirection * a, f && (x(h, h, f), x(d, d, f)), this.group.add(new l.Line(l.subPixelOptimizeLine({
                              anid: "tick_" + c[p],
                              shape: {
                                x1: h[0],
                                y1: h[1],
                                x2: d[0],
                                y2: d[1]
                              },
                              style: o[Ee](r.getLineStyle(), {
                                stroke: t.get("axisLine.lineStyle.color")
                              }),
                              z2: 2,
                              silent: !0
                            })))
                          }
                    },
                    axisLabel: function () {
                      var t = this.opt,
                        i = this.axisModel,
                        a = i.axis,
                        s = _(t.axisLabelShow, i.get("axisLabel.show"));
                      if (s && !a.scale.isBlank()) {
                        var u = i[Oe]("axisLabel"),
                          d = u[Oe](De),
                          f = u.get("margin"),
                          p = a.scale.getTicks(),
                          m = i.getFormattedLabels(),
                          v = (_(t.labelRotate, u.get("rotate")) || 0) * b / 180,
                          g = T(t[h], v, t.labelDirection),
                          y = i.get("data"),
                          x = [],
                          w = n(i),
                          M = i.get("triggerEvent");
                        o.each(p, function (n, r) {
                          if (!S(a, r, t.labelInterval)) {
                            var o = d;
                            y && y[n] && y[n][De] && (o = new c(y[n][De], d, i[pe]));
                            var s = o.getTextColor() || i.get("axisLine.lineStyle.color"),
                              u = a[J](n),
                              p = [u, t.labelOffset + t.labelDirection * f],
                              v = a.scale.getLabel(n),
                              _ = new l.Text({
                                anid: "label_" + n,
                                style: {
                                  text: m[r],
                                  textAlign: o.get("align", !0) || g[ze],
                                  textVerticalAlign: o.get("baseline", !0) || g.textVerticalAlign,
                                  textFont: o[Ie](),
                                  fill: typeof s === oe ? s(a.type === re ? v : "value" === a.type ? n + "" : n, r) : s
                                },
                                position: p,
                                rotation: g[h],
                                silent: w,
                                z2: 10
                              });
                            M && (_.eventData = e(i), _.eventData.targetType = "axisLabel", _.eventData.value = v), this._dumbGroup.add(_), _.updateTransform(), x.push(_), this.group.add(_), _.decomposeTransform()
                          }
                        }, this), r(i, x)
                      }
                    },
                    axisName: function () {
                      var t = this.opt,
                        r = this.axisModel,
                        a = _(t.axisName, r.get("name"));
                      if (a) {
                        var u, c = r.get("nameLocation"),
                          d = t.nameDirection,
                          f = r[Oe]("nameTextStyle"),
                          p = r.get("nameGap") || 0,
                          m = this.axisModel.axis[fe](),
                          v = m[0] > m[1] ? -1 : 1,
                          g = ["start" === c ? m[0] - v * p : "end" === c ? m[1] + v * p : (m[0] + m[1]) / 2, c === Te ? t.labelOffset + d * p : 0],
                          y = r.get("nameRotate");
                        null != y && (y = y * b / 180);
                        var x;
                        c === Te ? u = T(t[h], null != y ? y : t[h], d) : (u = i(t, c, y || 0, m), x = t.axisNameAvailableWidth, null != x && (x = Math.abs(x / Math.sin(u[h])), !isFinite(x) && (x = null)));
                        var w = f[Ie](),
                          M = r.get("nameTruncate", !0) || {},
                          S = M.ellipsis,
                          P = _(t.nameTruncateMaxWidth, M.maxWidth, x),
                          C = null != S && null != P ? s.truncateText(a, P, w, S, {
                            minChar: 2,
                            placeholder: M.placeholder
                          }) : a,
                          A = r.get("tooltip", !0),
                          L = r.mainType,
                          k = {
                            componentType: L,
                            name: a,
                            $vars: ["name"]
                          };
                        k[L + "Index"] = r[Q];
                        var I = new l.Text({
                          anid: "name",
                          __fullText: a,
                          __truncatedText: C,
                          style: {
                            text: C,
                            textFont: w,
                            fill: f.getTextColor() || r.get("axisLine.lineStyle.color"),
                            textAlign: u[ze],
                            textVerticalAlign: u.textVerticalAlign
                          },
                          position: g,
                          rotation: u[h],
                          silent: n(r),
                          z2: 1,
                          tooltip: A && A.show ? o[ge]({
                            content: a,
                            formatter: function () {
                              return a
                            },
                            formatterParams: k
                          }, A) : null
                        });
                        r.get("triggerEvent") && (I.eventData = e(r), I.eventData.targetType = "axisName", I.eventData.name = a), this._dumbGroup.add(I), I.updateTransform(), this.group.add(I), I.decomposeTransform()
                      }
                    }
                  },
                  T = w.innerTextLayout = function (t, e, i) {
                    var n, r, a = f(e - t);
                    return v(a) ? (r = i > 0 ? "top" : we, n = Me) : v(a - b) ? (r = i > 0 ? we : "top", n = Me) : (r = Te, n = a > 0 && b > a ? i > 0 ? "right" : "left" : i > 0 ? "left" : "right"), {
                      rotation: a,
                      textAlign: n,
                      textVerticalAlign: r
                    }
                  },
                  S = w.ifIgnoreOnTick = function (t, e, i) {
                    var n, r = t.scale;
                    return r.type === m && (typeof i === oe ? (n = r.getTicks()[e], !i(n, r.getLabel(n))) : e % (i + 1))
                  },
                  P = w.getInterval = function (t, e) {
                    var i = t.get("interval");
                    return (null == i || "auto" == i) && (i = e), i
                  };
                return w
              }), e("echarts/component/axis/AxisView", [Ve, "../axisPointer/modelHelper", "../../echarts"], function (t) {
                function e(t, e, a, o, s, l) {
                  var u = r.getAxisPointerClass(t.axisPointerClass);
                  if (u) {
                    var c = n.getAxisPointerModel(e);
                    c ? (t._axisPointer || (t._axisPointer = new u)).render(e, c, o, l) : i(t, o)
                  }
                }

                function i(t, e, i) {
                  var n = t._axisPointer;
                  n && n[T](e, i), t._axisPointer = null
                }
                var n = t("../axisPointer/modelHelper"),
                  r = t("../../echarts").extendComponentView({
                    type: "axis",
                    _axisPointer: null,
                    axisPointerClass: null,
                    render: function (t, i, a, o) {
                      this.axisPointerClass && n.fixValue(t), r.superApply(this, "render", arguments), e(this, t, i, a, o, !0)
                    },
                    updateAxisPointer: function (t, i, n, r) {
                      e(this, t, i, n, r, !1)
                    },
                    remove: function (t, e) {
                      var i = this._axisPointer;
                      i && i[W](e), r.superApply(this, W, arguments)
                    },
                    dispose: function (t, e) {
                      i(this, e), r.superApply(this, T, arguments)
                    }
                  }),
                  a = [];
                return r.registerAxisPointerClass = function (t, e) {
                  a[t] = e
                }, r.getAxisPointerClass = function (t) {
                  return t && a[t]
                }, r
              }), e("echarts/component/axis/cartesianAxisHelper", [Ve, Fe], function (t) {
                var e = t(Fe),
                  i = {};
                return i.layout = function (t, i, n) {
                  function r(t) {
                    var e = a[ne](t);
                    return e[te](e[J](0))
                  }
                  n = n || {};
                  var a = t[Re],
                    o = i.axis,
                    s = {},
                    l = o[be],
                    u = o.onZero ? "onZero" : l,
                    c = o.dim,
                    d = a.getRect(),
                    f = [d.x, d.x + d.width, d.y, d.y + d[Le]],
                    p = i.get(O) || 0,
                    m = {
                      x: {
                        top: f[2] - p,
                        bottom: f[3] + p
                      },
                      y: {
                        left: f[0] - p,
                        right: f[1] + p
                      }
                    };
                  m.x.onZero = Math.max(Math.min(r("y"), m.x[we]), m.x.top), m.y.onZero = Math.max(Math.min(r("x"), m.y.right), m.y.left), s[be] = ["y" === c ? m.y[u] : f[0], "x" === c ? m.x[u] : f[3]], s[h] = Math.PI / 2 * ("x" === c ? 0 : 1);
                  var v = {
                    top: -1,
                    bottom: 1,
                    left: -1,
                    right: 1
                  };
                  s.labelDirection = s.tickDirection = s.nameDirection = v[l], s.labelOffset = o.onZero ? m[c][l] - m[c].onZero : 0, i.get("axisTick.inside") && (s.tickDirection = -s.tickDirection), e[Y](n.labelInside, i.get("axisLabel.inside")) && (s.labelDirection = -s.labelDirection);
                  var g = i.get("axisLabel.rotate");
                  return s.labelRotate = "top" === u ? -g : g, s.labelInterval = o.getLabelInterval(), s.z2 = 1, s
                }, i
              }), e("echarts/component/axisPointer/globalListener", [Ve, D, Fe, "../../util/model"], function (t) {
                function e(t, e) {
                  function o(n, r) {
                    t.on(n, function (n) {
                      var o = a(e);
                      u(l(t).records, function (t) {
                        t && r(t, n, o[P])
                      }), i(o.pendings, e)
                    })
                  }
                  l(t).initialized || (l(t).initialized = !0, o("click", s.curry(r, "click")), o("mousemove", s.curry(r, "mousemove")), o("globalout", n))
                }

                function i(t, e) {
                  var i, n = t.showTip[ve],
                    r = t.hideTip[ve];
                  n ? i = t.showTip[n - 1] : r && (i = t.hideTip[r - 1]), i && (i[P] = null, e[P](i))
                }

                function n(t, e, i) {
                  t.handler("leave", null, i)
                }

                function r(t, e, i, n) {
                  e.handler(t, i, n)
                }

                function a(t) {
                  var e = {
                      showTip: [],
                      hideTip: []
                    },
                    i = function (n) {
                      var r = e[n.type];
                      r ? r.push(n) : (n[P] = i, t[P](n))
                    };
                  return {
                    dispatchAction: i,
                    pendings: e
                  }
                }
                var o = t(D),
                  s = t(Fe),
                  l = t("../../util/model").makeGetter(),
                  u = s.each,
                  c = {};
                return c[j] = function (t, i, n) {
                  if (!o.node) {
                    var r = i.getZr();
                    l(r).records || (l(r).records = {}), e(r, i);
                    var a = l(r).records[t] || (l(r).records[t] = {});
                    a.handler = n
                  }
                }, c.unregister = function (t, e) {
                  if (!o.node) {
                    var i = e.getZr(),
                      n = (l(i).records || {})[t];
                    n && (l(i).records[t] = null)
                  }
                }, c
              }), e("echarts/component/axisPointer/BaseAxisPointer", [Ve, Fe, "../../util/clazz", Z, "../../util/model", "./modelHelper", "zrender/core/event", "../../util/throttle"], function (t) {
                function e() {}

                function a(t, e, i, n) {
                  o(m(i).lastProp, n) || (m(i).lastProp = n, e ? p.updateProps(i, n, t) : (i.stopAnimation(), i.attr(n)))
                }

                function o(t, e) {
                  if (d[ie](t) && d[ie](e)) {
                    var i = !0;
                    return d.each(e, function (e, n) {
                      i &= o(t[n], e)
                    }), !!i
                  }
                  return t === e
                }

                function s(t, e) {
                  t[e.get("label.show") ? "show" : "hide"]()
                }

                function l(t) {
                  return {
                    position: t[be].slice(),
                    rotation: t[h] || 0
                  }
                }

                function u(t, e) {
                  var i = t.get("icon"),
                    n = {
                      x: -1,
                      y: -1,
                      width: 2,
                      height: 2
                    },
                    r = d[ge]({
                      style: {
                        strokeNoScale: !0
                      },
                      rectHover: !0,
                      cursor: "move",
                      draggable: !0
                    }, e);
                  return 0 === i[ce]("image://") ? (n.image = i.slice(8), r.style = n, new p.Image(r)) : p.makePath(i[x]("path://", ""), r, n, Me)
                }

                function c(t, e, i) {
                  var n = e.get("z"),
                    r = e.get(_);
                  t && t[b](function (t) {
                    "group" !== t.type && (null != n && (t.z = n), null != r && (t[_] = r), t[Ae] = i)
                  })
                }
                var d = t(Fe),
                  f = t("../../util/clazz"),
                  p = t(Z),
                  m = t("../../util/model").makeGetter(),
                  v = t("./modelHelper"),
                  g = t("zrender/core/event"),
                  w = t("../../util/throttle"),
                  M = d.clone,
                  T = d.bind;
                return e[ye] = {
                  _group: null,
                  _lastGraphicKey: null,
                  _handle: null,
                  _dragging: !1,
                  _lastValue: null,
                  _lastStatus: null,
                  _payloadInfo: null,
                  animationThreshold: 15,
                  render: function (t, e, i, n) {
                    var r = e.get("value"),
                      o = e.get("status");
                    if (this._axisModel = t, this._axisPointerModel = e, this._api = i, n || this._lastValue !== r || this._lastStatus !== o) {
                      this._lastValue = r, this._lastStatus = o;
                      var s = this._group,
                        l = this._handle;
                      if (!o || "hide" === o) return s && s.hide(), void(l && l.hide());
                      s && s.show(), l && l.show();
                      var u = {};
                      this.makeElOption(u, r, t, e, i);
                      var h = u.graphicKey;
                      h !== this._lastGraphicKey && this.clear(i), this._lastGraphicKey = h;
                      var f = this._moveAnimation = this.determineAnimation(t, e);
                      if (s) {
                        var m = d.curry(a, e, f);
                        this.updatePointerEl(s, u, m, e), this.updateLabelEl(s, u, m, e)
                      } else s = this._group = new p.Group, this.createPointerEl(s, u, t, e), this.createLabelEl(s, u, t, e), i.getZr().add(s);
                      c(s, e, !0), this._renderHandle(r)
                    }
                  },
                  remove: function (t) {
                    this.clear(t)
                  },
                  dispose: function (t) {
                    this.clear(t)
                  },
                  determineAnimation: function (t, e) {
                    var i = e.get(H),
                      n = t.axis,
                      r = n.type === re,
                      a = e.get("snap");
                    if (!a && !r) return !1;
                    if ("auto" === i || null == i) {
                      var o = this.animationThreshold;
                      if (r && n.getBandWidth() > o) return !0;
                      if (a) {
                        var s = v.getAxisInfo(t).seriesDataCount,
                          l = n[fe]();
                        return Math.abs(l[0] - l[1]) / s > o
                      }
                      return !1
                    }
                    return i === !0
                  },
                  makeElOption: function () {},
                  createPointerEl: function (t, e) {
                    var i = e.pointer;
                    if (i) {
                      var n = m(t).pointerEl = new p[i.type](M(e.pointer));
                      t.add(n)
                    }
                  },
                  createLabelEl: function (t, e, i, n) {
                    if (e.label) {
                      var r = m(t).labelEl = new p.Rect(M(e.label));
                      t.add(r), s(r, n)
                    }
                  },
                  updatePointerEl: function (t, e, i) {
                    var n = m(t).pointerEl;
                    n && (n[_e](e.pointer.style), i(n, {
                      shape: e.pointer.shape
                    }))
                  },
                  updateLabelEl: function (t, e, i, n) {
                    var r = m(t).labelEl;
                    r && (r[_e](e.label.style), i(r, {
                      shape: e.label.shape,
                      position: e.label[be]
                    }), s(r, n))
                  },
                  _renderHandle: function (t) {
                    if (!this._dragging && this.updateHandleTransform) {
                      var e = this._axisPointerModel,
                        a = this._api.getZr(),
                        o = this._handle,
                        s = e[Oe]("handle"),
                        l = e.get("status");
                      if (!s.get("show") || !l || "hide" === l) return o && a[W](o), void(this._handle = null);
                      var h;
                      this._handle || (h = !0, o = this._handle = u(s, {
                        onmousemove: function (t) {
                          g.stop(t.event)
                        },
                        onmousedown: T(this._onHandleDragMove, this, 0, 0),
                        drift: T(this._onHandleDragMove, this),
                        ondragend: T(this._onHandleDragEnd, this)
                      }), a.add(o)), c(o, e, !1);
                      var f = ["color", "borderColor", "borderWidth", xe, "shadowColor", r, n, i];
                      o[_e](s.getItemStyle(null, f));
                      var p = s.get("size");
                      d[y](p) || (p = [p, p]), o.attr("scale", [p[0] / 2, p[1] / 2]), w.createOrUpdate(this, "_doDispatchAxisPointer", s.get("throttle") || 0, "fixRate"), this._moveHandleToValue(t, h)
                    }
                  },
                  _moveHandleToValue: function (t, e) {
                    a(this._axisPointerModel, !e && this._moveAnimation, this._handle, l(this.getHandleTransform(t, this._axisModel, this._axisPointerModel)))
                  },
                  _onHandleDragMove: function (t, e) {
                    var i = this._handle;
                    if (i) {
                      this._dragging = !0;
                      var n = this.updateHandleTransform(l(i), [t, e], this._axisModel, this._axisPointerModel);
                      this._payloadInfo = n, i.stopAnimation(), i.attr(l(n)), m(i).lastProp = null, this._doDispatchAxisPointer()
                    }
                  },
                  _doDispatchAxisPointer: function () {
                    var t = this._handle;
                    if (t) {
                      var e = this._payloadInfo,
                        i = this._axisModel;
                      this._api[P]({
                        type: "updateAxisPointer",
                        x: e.cursorPoint[0],
                        y: e.cursorPoint[1],
                        tooltipOption: e.tooltipOption,
                        axesInfo: [{
                          axisDim: i.axis.dim,
                          axisIndex: i[Q]
                        }]
                      })
                    }
                  },
                  _onHandleDragEnd: function () {
                    this._dragging = !1;
                    var t = this._handle;
                    if (t) {
                      var e = this._axisPointerModel.get("value");
                      this._moveHandleToValue(e), this._api[P]({
                        type: "hideTip"
                      })
                    }
                  },
                  getHandleTransform: null,
                  updateHandleTransform: null,
                  clear: function (t) {
                    this._lastValue = null, this._lastStatus = null;
                    var e = t.getZr(),
                      i = this._group,
                      n = this._handle;
                    e && i && (this._lastGraphicKey = null, i && e[W](i), n && e[W](n), this._group = null, this._handle = null, this._payloadInfo = null)
                  },
                  doClear: function () {},
                  buildLabel: function (t, e, i) {
                    return i = i || 0, {
                      x: t[i],
                      y: t[1 - i],
                      width: e[i],
                      height: e[1 - i]
                    }
                  }
                }, e[ye].constructor = e, f.enableClassExtend(e), e
              }), e("echarts/component/axisPointer/viewHelper", [Ve, Fe, Z, "zrender/contain/text", "../../util/format", "zrender/core/matrix", "../../coord/axisHelper", "../axis/AxisBuilder"], function (t) {
                function e(t, e, i, n) {
                  var r = n[Pe](),
                    a = n[Se]();
                  t[0] = Math.min(t[0] + e, r) - e, t[1] = Math.min(t[1] + i, a) - i, t[0] = Math.max(t[0], 0), t[1] = Math.max(t[1], 0)
                }
                var a = t(Fe),
                  o = t(Z),
                  s = t("zrender/contain/text"),
                  l = t("../../util/format"),
                  u = t("zrender/core/matrix"),
                  c = t("../../coord/axisHelper"),
                  f = t("../axis/AxisBuilder"),
                  m = {};
                return m.buildElStyle = function (t) {
                  var e, i = t.get("type"),
                    n = t[Oe](i + "Style");
                  return "line" === i ? (e = n.getLineStyle(), e.fill = null) : "shadow" === i && (e = n.getAreaStyle(), e[d] = null), e
                }, m.buildLabelElOption = function (t, a, o, u, c) {
                  var h = o.get("value"),
                    d = m.getValueLabel(h, a.axis, a[pe], o.get("seriesDataIndices"), {
                      precision: o.get("label.precision"),
                      formatter: o.get("label.formatter")
                    }),
                    f = o[Oe]("label"),
                    p = f[Oe](De),
                    v = l.normalizeCssArray(f.get("padding") || 0),
                    g = p[Ie](),
                    y = s[ke](d, g, c[ze], c.textBaseline),
                    x = c[be],
                    _ = y.width + v[1] + v[3],
                    b = y[Le] + v[0] + v[2],
                    w = c.align;
                  "right" === w && (x[0] -= _), w === Me && (x[0] -= _ / 2);
                  var M = c.verticalAlign;
                  M === we && (x[1] -= b), M === Te && (x[1] -= b / 2), e(x, _, b, u);
                  var T = f.get("backgroundColor");
                  T && "auto" !== T || (T = a.get("axisLine.lineStyle.color")), t.label = {
                    shape: {
                      x: 0,
                      y: 0,
                      width: _,
                      height: b,
                      r: f.get("borderRadius")
                    },
                    position: x.slice(),
                    style: {
                      text: d,
                      textFont: g,
                      textFill: p.getTextColor(),
                      textPosition: "inside",
                      fill: T,
                      stroke: f.get("borderColor") || L,
                      lineWidth: f.get("borderWidth") || 0,
                      shadowBlur: f.get(r),
                      shadowColor: f.get("shadowColor"),
                      shadowOffsetX: f.get(n),
                      shadowOffsetY: f.get(i)
                    },
                    z2: 10
                  }
                }, m.getValueLabel = function (t, e, i, n, r) {
                  var o = e.scale.getLabel(t, {
                      precision: r.precision
                    }),
                    s = r.formatter;
                  if (s) {
                    var l = {
                      value: c.getAxisRawValue(e, t),
                      seriesData: []
                    };
                    a.each(n, function (t) {
                      var e = i.getSeriesByIndex(t[E]),
                        n = t.dataIndexInside,
                        r = e && e[w](n);
                      r && l.seriesData.push(r)
                    }), a[v](s) ? o = s[x]("{value}", o) : a.isFunction(s) && (o = s(l))
                  }
                  return o
                }, m.getTransformedPosition = function (t, e, i) {
                  var n = u[me]();
                  return u.rotate(n, n, i[h]), u.translate(n, n, i[be]), o[p]([t[J](e), (i.labelOffset || 0) + (i.labelDirection || 1) * (i.labelMargin || 0)], n)
                }, m.buildCartesianSingleLabelElOption = function (t, e, i, n, r, a) {
                  var o = f.innerTextLayout(i[h], 0, i.labelDirection);
                  i.labelMargin = r.get("label.margin"), m.buildLabelElOption(e, n, r, a, {
                    position: m.getTransformedPosition(n.axis, t, i),
                    align: o[ze],
                    verticalAlign: o.textVerticalAlign
                  })
                }, m.makeLineShape = function (t, e, i) {
                  return i = i || 0, {
                    x1: t[i],
                    y1: t[1 - i],
                    x2: e[i],
                    y2: e[1 - i]
                  }
                }, m.makeRectShape = function (t, e, i) {
                  return i = i || 0, {
                    x: t[i],
                    y: t[1 - i],
                    width: e[i],
                    height: e[1 - i]
                  }
                }, m.makeSectorShape = function (t, e, i, n, r, a) {
                  return {
                    cx: t,
                    cy: e,
                    r0: i,
                    r: n,
                    startAngle: r,
                    endAngle: a,
                    clockwise: !0
                  }
                }, m
              }), e("echarts/component/tooltip/TooltipContent", [Ve, Fe, "zrender/tool/color", "zrender/core/event", "../../util/format", D], function (t) {
                function e(t) {
                  var e = "cubic-bezier(0.23, 1, 0.32, 1)",
                    i = "left " + t + "s " + e + ",top " + t + "s " + e;
                  return a.map(d, function (t) {
                    return t + "transition:" + i
                  }).join(";")
                }

                function i(t) {
                  var e = [],
                    i = t.get("fontSize"),
                    n = t.getTextColor();
                  return n && e.push("color:" + n), e.push("font:" + t[Ie]()), i && e.push("line-height:" + Math.round(3 * i / 2) + "px"), u(["decoration", "align"], function (i) {
                    var n = t.get(i);
                    n && e.push("text-" + i + ":" + n)
                  }), e.join(";")
                }

                function n(t) {
                  var n = [],
                    r = t.get("transitionDuration"),
                    a = t.get("backgroundColor"),
                    s = t[Oe](De),
                    d = t.get("padding");
                  return r && n.push(e(r)), a && (h[I] ? n.push("background-Color:" + a) : (n.push("background-Color:#" + o.toHex(a)), n.push("filter:alpha(opacity=70)"))), u(["width", "color", "radius"], function (e) {
                    var i = "border-" + e,
                      r = c(i),
                      a = t.get(r);
                    null != a && n.push(i + ":" + a + ("color" === e ? "" : "px"))
                  }), n.push(i(s)), null != d && n.push("padding:" + l.normalizeCssArray(d).join("px ") + "px"), n.join(";") + ";"
                }

                function r(t, e) {
                  var i = document[he]("div"),
                    n = this._zr = e.getZr();
                  this.el = i, this._x = e[Pe]() / 2, this._y = e[Se]() / 2, t.appendChild(i), this._container = t, this._show = !1, this._hideTimeout;
                  var r = this;
                  i.onmouseenter = function () {
                    r._enterable && (clearTimeout(r._hideTimeout), r._show = !0), r._inContent = !0
                  }, i.onmousemove = function (e) {
                    if (e = e || window.event, !r._enterable) {
                      var i = n.handler;
                      s.normalizeEvent(t, e, !0), i.dispatch("mousemove", e)
                    }
                  }, i.onmouseleave = function () {
                    r._enterable && r._show && r.hideLater(r._hideDelay), r._inContent = !1
                  }
                }
                var a = t(Fe),
                  o = t("zrender/tool/color"),
                  s = t("zrender/core/event"),
                  l = t("../../util/format"),
                  u = a.each,
                  c = l.toCamelCase,
                  h = t(D),
                  d = ["", "-webkit-", "-moz-", "-o-"],
                  f = "position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;";
                return r[ye] = {
                  constructor: r,
                  _enterable: !0,
                  update: function () {
                    var t = this._container,
                      e = t.currentStyle || document.defaultView.getComputedStyle(t),
                      i = t.style;
                    "absolute" !== i[be] && "absolute" !== e[be] && (i[be] = "relative")
                  },
                  show: function (t) {
                    clearTimeout(this._hideTimeout);
                    var e = this.el;
                    e.style.cssText = f + n(t) + ";left:" + this._x + "px;top:" + this._y + "px;" + (t.get("extraCssText") || ""), e.style.display = e.innerHTML ? "block" : "none", this._show = !0
                  },
                  setContent: function (t) {
                    this.el.innerHTML = null == t ? "" : t
                  },
                  setEnterable: function (t) {
                    this._enterable = t
                  },
                  getSize: function () {
                    var t = this.el;
                    return [t.clientWidth, t.clientHeight]
                  },
                  moveTo: function (t, e) {
                    var i, n = this._zr;
                    n && n.painter && (i = n.painter.getViewportRoot()) && (t += i.offsetLeft || 0, e += i.offsetTop || 0);
                    var r = this.el.style;
                    r.left = t + "px", r.top = e + "px", this._x = t, this._y = e
                  },
                  hide: function () {
                    this.el.style.display = "none", this._show = !1
                  },
                  hideLater: function (t) {
                    !this._show || this._inContent && this._enterable || (t ? (this._hideDelay = t, this._show = !1, this._hideTimeout = setTimeout(a.bind(this.hide, this), t)) : this.hide())
                  },
                  isShow: function () {
                    return this._show
                  }
                }, r
              }), e("zrender", ["zrender/zrender"], function (t) {
                return t
              }), e("echarts", ["echarts/echarts"], function (t) {
                return t
              });
              var He = t("echarts");
              return He.graphic = t("echarts/util/graphic"), He.number = t("echarts/util/number"), He.format = t("echarts/util/format"), t("echarts/chart/bar"), t("echarts/chart/line"), t("echarts/component/gridSimple"), t("echarts/component/title"), t("echarts/component/legend"), t("echarts/component/tooltip"), t("echarts/component/markArea"), t("zrender/vml/vml"), He
            });

          function SetCookie(t, e, r, a, o, c, n, i, l) {
            var u, m = $.cookie(t);
            null != m && "" != m ? (-1 == (u = unescape(m)).indexOf(e) && (u += "," + getCookieValue(e, r, i, a, o, c, n), $.cookie(t, escape(u), {
              expires: 30,
              domain: "banksteel.com",
              path: "/"
            })), changeShortCarList(u)) : (u = getCookieValue(e, r, i, a, o, c, n), $.cookie(t, escape(u), {
              expires: 30,
              domain: "banksteel.com",
              path: "/"
            }), m = $.cookie(t), changeShortCarList(unescape(m)))
          }

          function getCookieValue(t, e, r, a, o, c, n) {
            return t + "_" + e + "_" + r + "_" + a + "_" + o + "_" + c + "_" + n
          }

          function changeShortCarList(t) {
            var e = 0,
              r = 0,
              a = 0,
              o = 0,
              c = 0;
            if (t) {
              for (var n = t.split(","), i = 0; i < n.length; i++) var l = parseFloat(n[i].split("_")[5]),
                u = parseFloat(n[i].split("_")[4]),
                m = parseFloat(n[i].split("_")[3]),
                p = parseInt(n[i].split("_")[6]),
                s = MyNumber.precision(MyNumber.mul(l, m), 4),
                o = MyNumber.add(MyNumber.precision(parseFloat(o), 2), MyNumber.precision(parseFloat(MyNumber.mul(s, p)), 2), 2),
                a = MyNumber.add(MyNumber.precision(parseFloat(a), 4), MyNumber.precision(parseFloat(MyNumber.mul(l, p)), 4), 4),
                e = MyNumber.add(MyNumber.precision(parseFloat(e), 4), MyNumber.precision(parseFloat(u), 4), 4),
                r = MyNumber.add(MyNumber.precision(parseFloat(r), 2), MyNumber.precision(parseFloat(m), 2), 2),
                c = p + c;
              $("#rcart_top").html(c), $("#rcart").html(c), $("#cartCountNav").html(c), $("#cartCountNav1").html(c), $("#itemTotalTemp").html(c), $("#averageQtyTotalTemp").html(a), $("#priceTotalTemp").html(o)
            } else $("#rcart_top").html(0), $("#rcart").html(0), $("#cartCountNav").html(0), $("#cartCountNav1").html(0), $("#itemTotalTemp").html(0), $("#averageQtyTotalTemp").html(0), $("#priceTotalTemp").html(0)
          }

          function MyNumber() {}

          function accDiv(t, e) {
            var r = 0,
              a = 0;
            try {
              r = t.toString().split(".")[1].length
            } catch (t) {}
            try {
              a = e.toString().split(".")[1].length
            } catch (t) {}
            return Math.Number(t.toString().replace(".", "")) / Math.Number(e.toString().replace(".", "")) * Math.pow(10, a - r)
          }

          function accMul(t, e) {
            var r = 0,
              t = new Number(t).toString(),
              e = new Number(e).toString();
            try {
              r += t.split(".")[1].length
            } catch (t) {}
            try {
              r += e.split(".")[1].length
            } catch (t) {}
            return Number(t.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, r)
          }

          function accMuls(t) {
            for (var e = 0, r = "", a = 1, o = 0; o < t.length; o++) {
              r = t[o].toString();
              try {
                e += r.split(".")[1].length
              } catch (t) {}
              a *= Number(r.replace(".", ""))
            }
            return a / Math.pow(10, e)
          }

          function accAdd(t, e) {
            var r, a, o;
            try {
              o = t.toString().split(".")[1].length
            } catch (t) {
              o = 0
            }
            try {
              r = e.toString().split(".")[1].length
            } catch (t) {
              r = 0
            }
            return a = Math.pow(10, Math.max(o, r)), o = Math.max(o, r), ((t * a + e * a) / a).toFixed(o)
          }

          function accMinus(t, e) {
            var r, a, o, e = accMul(-1, e);
            try {
              o = t.toString().split(".")[1].length
            } catch (t) {
              o = 0
            }
            try {
              r = e.toString().split(".")[1].length
            } catch (t) {
              r = 0
            }
            return a = Math.pow(10, Math.max(o, r)), o = Math.max(o, r), ((t * a + e * a) / a).toFixed(o)
          }

          function accPrecision(t, e) {
            return (Math.round(t * Math.pow(10, e)) / Math.pow(10, e)).toFixed(e)
          }
          MyNumber.div = function (t, e) {
            return accDiv(t, e)
          }, MyNumber.mul = function (t, e) {
            return accMul(t, e)
          }, MyNumber.muls = function (t) {
            return accMuls(t)
          }, MyNumber.add = function (t, e, r) {
            return t = parseFloat(t), e = parseFloat(e), accAdd(accPrecision(t, r), accPrecision(e, r))
          }, MyNumber.minus = function (t, e, r) {
            return t = parseFloat(t), e = parseFloat(e), accMinus(accPrecision(t, r), accPrecision(e, r))
          }, MyNumber.precision = function (t, e) {
            return accPrecision(parseFloat(t), e)
          };
          var token = jQuery.cookie("user_token"),
            userId = "";
          token ? $.ajax({
            type: "POST",
            url: "//login.banksteel.com/sso/verifyToken.htm",
            data: {
              token: token
            },
            success: function (t) {
              t && t.content && t.content.loginUID ? (userId = t.content.loginUID, changeShortCarList(!!(t = $.cookie("supermarket_cart_" + userId)) && unescape(t))) : ($("#rcart_top").html("0"), $("#rcart").html("0"), $("#itemTotalTemp").html("0"), $("#averageQtyTotalTemp").html("0.0000"), $("#priceTotalTemp").html("0.00"))
            }
          }) : ($("#rcart_top").html(0), $("#rcart").html(0), $("#cartCountNav").html(0), $("#cartCountNav1").html(0), $("#itemTotalTemp").html(0), $("#averageQtyTotalTemp").html(0), $("#priceTotalTemp").html(0));

          function dateFormat(e) {
            var t = (e = new Date(e)).getFullYear(),
              a = (a = e.getMonth() + 1) < 10 ? "0" + a : a,
              i = (i = e.getDate()) < 10 ? "0" + i : i,
              o = (o = e.getHours()) < 10 ? "0" + o : o,
              e = e.getMinutes();
            return t + "-" + a + "-" + i + " " + o + ":" + (e < 10 ? "0" + e : e)
          }

          function dateFormatDay(e) {
            var t = (e = new Date(e)).getFullYear(),
              a = (a = e.getMonth() + 1) < 10 ? "0" + a : a,
              e = e.getDate();
            return t + a + (e < 10 ? "0" + e : e)
          }

          function dosubmit(t) {
            var e, a, i = "请选择省市" == $(".conten-zhaohuo .area_title").text() ? null : $(".conten-zhaohuo .area_title").text().split("/")[0],
              o = $(".conten-zhaohuo .area_title").text().split("/")[1];
            return "请选择省市" == $(".conten-zhaohuo .area_title").text() ? ($(".mask").show(), dialog({
              title: "提示",
              content: '<div class="bounced">' + $(".conten-zhaohuo .area_title").text() + "</div>",
              width: "380",
              height: "70",
              fixed: !0,
              okValue: "确定",
              ok: function () {
                $(".mask").hide()
              }
            }).show(), !1) : "" == o || null == o ? ($(".mask").show(), dialog({
              title: "提示",
              content: '<div class="bounced">请选择城市!</div>',
              width: "380",
              height: "70",
              fixed: !0,
              okValue: "确定",
              ok: function () {
                $(".mask").hide()
              }
            }).show(), !1) : ("写下您的真实需求，剩下的就交给我们吧!" == $("#content" + t).val() && $("#content" + t).val(""), void(checkMessageInput(t) && (e = escape($("#content" + t).val()), a = escape($("#varie").val()), i = escape(i), o = escape(o), $.ajax({
              url: "//caigou.banksteel.com/caigou/publish.jsp",
              type: "post",
              dataType: "jsonp",
              jsonp: "callback",
              data: {
                categoryName: a,
                cityName: i + "/" + o,
                content: e,
                mobile: $("#telephone" + t).val(),
                source: "20"
              },
              beforeSend: function () {
                $("#findGoods").attr({
                  disabled: "disabled"
                })
              },
              timeout: 5e3,
              complete: function () {
                $("#findGoods").removeAttr("disabled")
              },
              error: function () {
                $(".mask").show(), dialog({
                  title: "提示",
                  content: '<div class="bounced">委托找货失败！</div>',
                  width: "380",
                  height: "70",
                  fixed: !0,
                  okValue: "确定",
                  ok: function () {
                    $(".mask").hide()
                  }
                }).show()
              },
              success: function (e) {
                if ("success" != e.messageType) return ("log_in" == e.messageType ? ($(".mask").show(), dialog({
                  title: "提示",
                  content: '<div class="bounced">' + e.message + "</div>",
                  width: "380",
                  height: "70",
                  fixed: !0,
                  okValue: "登录",
                  ok: function () {
                    $(".mask").hide(), window.location.href = "//login.banksteel.com/login.htm?mybackurl=https://www.banksteel.com/"
                  }
                })) : ($(".mask").show(), dialog({
                  title: "提示",
                  content: '<div class="bounced">' + e.message + "</div>",
                  width: "380",
                  height: "70",
                  fixed: !0,
                  okValue: "确定",
                  ok: function () {
                    $(".mask").hide()
                  }
                }))).show(), !1;
                $("#content" + t).val(""), $("#telephone" + t).val(""), $(".conten-zhaohuo .area_title").html("请选择省市"), $("#varie").val(""), $(".breed_title").html("请选择品种"), $(".mask").show(), dialog({
                  title: "提示",
                  content: '<div class="bounced">' + e.message + "</div>",
                  width: "380",
                  height: "70",
                  fixed: !0,
                  okValue: "确定",
                  ok: function () {
                    $(".mask").hide()
                  }
                }).show()
              }
            }))))
          }

          function checkMessageInput(e) {
            var t = $("#telephone" + e).val();
            return "" == $("#varie").val() || null == $("#varie").val() ? ($(".mask").show(), dialog({
              title: "提示",
              content: '<div class="bounced">请选择品种!</div>',
              width: "380",
              height: "70",
              fixed: !0,
              okValue: "确定",
              ok: function () {
                $(".mask").hide()
              }
            }).show(), !1) : "" == $("#content" + e).val() ? ($(".mask").show(), dialog({
              title: "提示",
              content: '<div class="bounced">写下您的真实需求，包括规格、材质等，剩下的就交给我们吧！（80字以内）!</div>',
              width: "380",
              height: "70",
              fixed: !0,
              okValue: "确定",
              ok: function () {
                $(".mask").hide()
              }
            }).show(), $("#content" + e).focus(), !1) : 80 < $("#content" + e).val().length ? ($(".mask").show(), dialog({
              title: "提示",
              content: '<div class="bounced">找货需求描述不能超过80个字符！</div>',
              width: "380",
              height: "70",
              fixed: !0,
              okValue: "确定",
              ok: function () {
                $(".mask").hide()
              }
            }).show(), $("#content" + e).focus(), !1) : !(11 != t.length || !/^((13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8})|(((0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?)$/.test(t)) || ($(".mask").show(), dialog({
              title: "提示",
              content: '<div class="bounced">为了您的求购能及时被处理，请填写正确的手机号码，手机号码为数字，长度为11位！</div>',
              width: "380",
              height: "70",
              fixed: !0,
              okValue: "确定",
              ok: function () {
                $(".mask").hide()
              }
            }).show(), $("#telephone" + e).focus(), !1)
          }

          function removeHTML(t) {
            setTimeout(function () {
              var e = document.getElementById("content" + t).value;
              document.getElementById("content" + t).value = e.replace(/<[^>]*>/g, "")
            }, 10)
          }

          function formatDate(e) {
            return e.getFullYear() + "-" + (e.getMonth() + 1 < 10 ? "0" + (e.getMonth() + 1) : e.getMonth() + 1) + "-" + (e.getDate() < 10 ? "0" + e.getDate() : e.getDate())
          }

          function formatDate1(e) {
            return (e.getMonth() + 1 < 10 ? "0" + (e.getMonth() + 1) : e.getMonth() + 1) + "-" + (e.getDate() < 10 ? "0" + e.getDate() : e.getDate()) + " " + (e.getHours() < 10 ? "0" + e.getHours() : e.getHours()) + ":" + (e.getMinutes() < 10 ? "0" + e.getMinutes() : e.getMinutes())
          }

          function setCookie(e, t, a) {
            $.cookie(e, t, {
              expires: a || 30,
              domain: "banksteel.com",
              path: "/"
            })
          }

          function getCookie(e) {
            return $.cookie(e) || ""
          }
          $(function () {
            var tucaoDialog, closeMessage = ($.ajax({
                type: "GET",
                url: "https://www.banksteel.com/index/queryAd.jsp?siteName=ad_dialog_activity",
                success: function (e) {
                  if (e && 0 < e.length) {
                    var t = e[0].picUrl,
                      a = e[0].link,
                      e = e[0].remark;
                    try {
                      var i = JSON.parse(e),
                        o = i.width || 400,
                        n = i.height || 500,
                        c = i.count || 3,
                        s = i.startTime,
                        l = i.endTime;
                      if (s && l) {
                        var r = (new Date).getTime();
                        if (l < s) return;
                        if (r < s || l < r) return
                      }
                      var d, h = $.cookie("user_token"),
                        u = $.cookie("loginUID"),
                        p = new Date,
                        m = p.getFullYear() + "-" + (p.getMonth() + 1) + "-" + p.getDate(),
                        y = '<div class="ad-box" style="position: fixed;top: 0;left: 0;background-color: rgba(0, 0, 0, 0.5);width: 100%;height: 100%;z-index: 99999;"><div class="ad-box__con" style="position: relative;width: ' + o + "px;height: " + n + "px;margin: 0 auto; margin-top: calc(50vh - " + n / 2 + 'px) ;"><img src="' + t + '" alt="" style="width: 100%;height: 100%;cursor: pointer;" class="ad-box__ad"><img src="https://a1.gystatic.com/v6/images/close.png" alt="" style="width: 30px;height: 30px;position: absolute;right: 0;cursor: pointer;" class="ad-box__close"></div></div> ';
                      h && u ? (d = $.cookie("ad_count_" + m + u) || 0) < c && (d++, $.cookie("ad_count_" + m + u, d, {
                        expires: 1,
                        domain: "banksteel.com",
                        path: "/"
                      }), $("body").append(y)) : $("body").append(y);
                      $(document).on("click", ".ad-box__close", function () {
                        $(".ad-box").remove()
                      }), $(document).on("click", ".ad-box__ad", function () {
                        window.open(a)
                      })
                    } catch (e) {}
                  }
                }
              }), $.ajax({
                type: "GET",
                url: "//a1.gystatic.com/zhushou/js/style.json",
                success: function (e) {
                  var t = e.pc || {};
                  Object.keys(t).forEach(function (e) {
                    $(e).css(t[e])
                  })
                },
                error: function (e) {}
              }), $(".banner").hover(function () {
                $(".banner .prev,.banner .next").stop(!0, !0).fadeTo("show", .2)
              }, function () {
                $(".banner .prev,.banner .next").fadeOut()
              }), $(".banner").slide({
                mainCell: ".bd ul",
                autoPlay: !0,
                delayTime: 600,
                interTime: 5e3,
                trigger: "click",
                effect: "fold"
              }), $(".side2-info").slide({
                mainCell: ".side2-info-slide",
                effect: "topLoop",
                autoPlay: !0,
                vis: 1
              }), $.tab(".side2 .title li", ".side2-tab-content .conten", "on", "mouseover", "0"), $.tab(".cs-chart .title li", ".chart-conten .conten", "on", "mouseover", "0"), $.tab(".article-list2 .title li", ".article-list2 .list-content .conten", "on", "mouseover", "0"), $.tab(".title-supkt li", ".list-info .conten", "on", "mouseover", "0"), $(".close").click(function () {
                $(".side-login .side3").show(), $(".side3-content").hide()
              }), $(".ladySl").slide({
                mainCell: ".dlList",
                effect: "leftLoop",
                vis: 1,
                autoPlay: !0
              }), $(".fr-main-sd").slide({
                mainCell: ".bd ul",
                effect: "leftLoop",
                vis: 9,
                autoPlay: !1
              }), $(".wrap-shops").slide({
                mainCell: ".shop-list .shop-list-content",
                effect: "left",
                vis: 1,
                autoPlay: !0,
                delayTime: 600,
                interTime: 5e3
              }), $(".wrap-tjsj").slide({
                mainCell: ".shop-list-content",
                effect: "left",
                vis: 1,
                autoPlay: !0,
                delayTime: 600,
                interTime: 5e3
              }), $(document).on("click", "#user_tucao", function () {
                tucaoDialog = dialog({
                  title: !1,
                  id: "tucao_dialog",
                  skin: "feedback-dialog-skin",
                  url: "//www.banksteel.com/about/feedback/feedback_index.html",
                  width: "770",
                  height: "600",
                  fixed: !0
                }), Autofixed("#tucao_dialog", tucaoDialog), tucaoDialog.showModal()
              }), function closeMessage(e) {
                var tex, data, type, data;
                "https://www.banksteel.com" == e.origin && (tucaoDialog && tucaoDialog.close().remove(), tex = "", data = e.data, data && ("closeFeedback" == data ? tex = "" : (data = eval("(" + data + ")"), data.type && "feedback2" == data.type && (type = data.res, 1 == type ? (tex = "", feedbackSucess = dialog({
                  title: " ",
                  skin: "feedback-dialog-skin",
                  content: '<div class="feedback-success-tip"><div class="tip-img"></div><div class="desc">您的宝贵意见我们已经收到，谢谢！</div></div>',
                  width: "380",
                  height: "275",
                  fixed: !0
                }).showModal(), setTimeout(function () {
                  feedbackSucess.close().remove()
                }, 5e3)) : tex = 2 == type ? "数据库插入失败！" : "系统异常！"))), tex) && dialog({
                  title: "提示",
                  content: '<div class="feedback-success-tip"><div class="desc">' + tex + "</div></div>",
                  width: "380",
                  height: "80",
                  fixed: !0,
                  okValue: "确定",
                  ok: function () {}
                }).showModal()
              }),
              ewmDialog = (window.addEventListener ? window.addEventListener("message", closeMessage, !1) : window.attachEvent && window.attachEvent("onmessage", closeMessage), ""),
              pricedialog = ($(".shop-ewm").hover(function () {
                var e = $(this).attr("data-url");
                (ewmDialog = dialog({
                  skin: "ewm-dialog",
                  align: "bottom",
                  content: '<img width="90" height="90" src="' + e + '">'
                })).show(this)
              }, function () {
                ewmDialog.close(this).remove(this)
              }), ""),
              isDialogFrom = !1,
              tkEle = "",
              doc = ($(document).on("mouseenter", ".price-dialog", function () {
                var e;
                isDialogFrom && tkEle == this ? pricedialog.show() : (pricedialog && pricedialog.remove(), e = $(this).attr("data-chart"), pricedialog = dialog({
                  skin: "ewm-dialog price-dialog-content",
                  align: "bottom",
                  url: "/price_dialog2023.html?params=" + e,
                  width: "450px",
                  height: "260px"
                }), tkEle = this, isDialogFrom = !1, pricedialog.show(this))
              }), $(document).on("mouseenter", ".ui-popup", function () {
                $(this).children().hasClass("price-dialog-content") && (isDialogFrom = !0, pricedialog.show())
              }), $(document).on("mouseleave", ".price-dialog", function () {
                pricedialog.close()
              }), $(document).on("mouseleave", ".price-dialog-content", function () {
                pricedialog.close()
              }), $(document)),
              view = $("html,body"),
              win = $(window),
              section = $(".ptcon"),
              topA = $(".float-l li"),
              topback = $(window).scrollTop();

            function seFn() {
              section.each(function (e) {
                $(this).offset().top - doc.scrollTop() <= 100 && $(".float-l li b").hide().eq(e).show()
              })
            }
            win.scroll(function () {
              500 <= doc.scrollTop() ? $(".float-l").addClass("on") : $(".float-l").removeClass("on")
            }), topA.click(function (e) {
              var t = $(this).index(),
                t = section.eq(t).offset().top - 75;
              e.preventDefault(), view.stop(!0).animate({
                scrollTop: t
              }, function (e) {
                $(".float-l li b").hide().eq(e).show()
              })
            }), win.scroll(seFn), seFn();
            var token = jQuery.cookie("user_token"),
              areaSelectFrom = ($("#varie").val(""), $(".varietxt").click(function (e) {
                e.stopPropagation();
                var e = $(this),
                  t = $(this).find(".arrow");
                e.next("#variedown");
                t.hasClass("arrow") ? (t.removeClass("arrow").addClass("open"), $("#variedown").show()) : ($(this).find(".open").removeClass("open").addClass("arrow"), $("#variedown").hide())
              }), $("#variedown").on("click", "li", function (e) {
                e.stopPropagation();
                var e = $(this).text(),
                  t = $(this).data("id");
                $(".varie_title").text(e), $("#varie").val(e), $("#varieId").val(t), $(".varietxt .open").removeClass("open").addClass("arrow"), $("#variedown").hide()
              }), new areaSelectChange("areaSelectFrom-set", {
                hideCounty: !0,
                hideName: {
                  provinceName: "endProvinceId",
                  cityName: "endCityId",
                  countyName: "endDistrictId"
                }
              })),
              myChart = ($(document).on("click", ".ui-dialog-close", function () {
                $(".mask").hide()
              }), echarts.init(document.getElementById("cs_container1"))),
              weekTitle = ["7:30-8:00", "8:00-8:30", "8:30-9:00", "9:00-9:30", "9:30-10:00", "10:00-10:30", "10:30-11:00", "11:00-11:30", "11:30-12:00", "12:00-12:30", "12:30-13:00", "13:00-13:30", "13:30-14:00", "14:00-14:30", "14:30-15:00", "15:00-15:30", "15:30-16:00", "16:00-16:30", "16:30-17:00", "17:00-17:30", "17:30-18:00", "18:00-18:30", "18:30-19:00"],
              option = {
                color: ["#3CA6FA", "#FDCA8B", "#3CA6FA", "#FDCA8B"],
                tooltip: {
                  trigger: "axis",
                  backgroundColor: "rgba(255,255,255,0.9)",
                  borderColor: "#3CA6FA",
                  borderWidth: 1,
                  textStyle: {
                    color: "#666",
                    fontSize: 12
                  },
                  transitionDuration: 0,
                  extraCssText: "box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.4);border-radius:3px;",
                  axisPointer: {
                    type: "shadow",
                    shadowStyle: {
                      color: "rgba(178,221,255,0.2)"
                    }
                  },
                  formatter: function (e, t, a) {
                    for (var i = "", o = 0; o < e.length; o++) "今日下单量" == e[o].seriesName && (i += "今日" + weekTitle[e[o].dataIndex] + "下单量：<b>" + e[o].value + "</b> 吨<br>"), "昨日下单量" == e[o].seriesName && (i += "昨日" + weekTitle[e[o].dataIndex] + "下单量：<b>" + e[o].value + "</b> 吨<br>");
                    return i
                  }
                },
                grid: {
                  left: "5%",
                  top: "20%",
                  right: "5%",
                  bottom: "10%",
                  containLabel: !0
                },
                xAxis: {
                  type: "category",
                  data: [],
                  splitLine: {
                    show: !0,
                    lineStyle: {
                      color: "#E3F0F8"
                    }
                  },
                  axisLabel: {
                    textStyle: {
                      fontStyle: "normal",
                      fontWeight: "normal",
                      color: "#666"
                    }
                  },
                  axisLine: {
                    lineStyle: {
                      color: "#9EC7DF"
                    }
                  },
                  axisTick: {
                    show: !1
                  }
                },
                yAxis: [{
                  type: "value",
                  name: "下单量（吨）",
                  splitLine: {
                    show: !0,
                    lineStyle: {
                      color: "#E3F0F8"
                    }
                  },
                  nameTextStyle: {
                    color: "#666"
                  },
                  axisLine: {
                    lineStyle: {
                      color: "#9EC7DF"
                    }
                  },
                  axisTick: {
                    lineStyle: {
                      color: "#9EC7DF"
                    }
                  },
                  axisLabel: {
                    textStyle: {
                      fontStyle: "normal",
                      fontWeight: "normal",
                      color: "#666"
                    },
                    formatter: function (e, t) {
                      var a = 0;
                      return a = 0 != e ? parseInt(e / 1e3) + "K" : a
                    }
                  }
                }, {
                  type: "value",
                  name: "下单额（万元）",
                  splitLine: {
                    show: !1,
                    lineStyle: {
                      color: "#E3F0F8"
                    }
                  },
                  axisLabel: {
                    textStyle: {
                      fontStyle: "normal",
                      fontWeight: "normal",
                      color: "#666"
                    }
                  },
                  nameTextStyle: {
                    color: "#666"
                  },
                  axisLine: {
                    lineStyle: {
                      color: "#9EC7DF"
                    }
                  },
                  axisTick: {
                    lineStyle: {
                      color: "#9EC7DF"
                    }
                  }
                }],
                series: [{
                  name: "昨日下单量",
                  type: "bar",
                  data: []
                }, {
                  name: "今日下单量",
                  type: "bar",
                  data: []
                }, {
                  name: "昨日下单额",
                  type: "line",
                  yAxisIndex: 1,
                  hoverAnimation: !1,
                  data: []
                }, {
                  name: "今日下单额",
                  type: "line",
                  yAxisIndex: 1,
                  hoverAnimation: !1,
                  data: []
                }]
              },
              myChart1 = (myChart.setOption(option), echarts.init(document.getElementById("cs_container2"))),
              option1 = {
                color: ["#3CA6FA", "#FDCA8B", "#3CA6FA", "#FDCA8B"],
                tooltip: {
                  trigger: "axis",
                  backgroundColor: "rgba(255,255,255,0.9)",
                  borderColor: "#3CA6FA",
                  borderWidth: 1,
                  textStyle: {
                    color: "#666",
                    fontSize: 12
                  },
                  transitionDuration: 0,
                  extraCssText: "box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.4);border-radius:3px;",
                  axisPointer: {
                    type: "shadow",
                    shadowStyle: {
                      color: "rgba(178,221,255,0.2)"
                    }
                  },
                  formatter: function (e, t, a) {
                    for (var i = "", o = 0; o < e.length; o++) "本周订单数" == e[o].seriesName && (i += "本" + e[o].name + "订单数：<b>" + e[o].value + "</b> 笔<br>"), "上周订单数" == e[o].seriesName && (i += "上" + e[o].name + "订单数：<b>" + e[o].value + "</b> 笔<br>"), "本周成交量" == e[o].seriesName && (i += "本" + e[o].name + "成交量：<b>" + e[o].value + "</b> 吨<br>"), "上周成交量" == e[o].seriesName && (i += "上" + e[o].name + "成交量：<b>" + e[o].value + "</b> 吨<br>");
                    return i
                  }
                },
                grid: {
                  left: "5%",
                  top: "30%",
                  right: "5%",
                  bottom: "10%",
                  containLabel: !0
                },
                xAxis: {
                  type: "category",
                  data: [],
                  splitLine: {
                    show: !0,
                    lineStyle: {
                      color: "#E3F0F8"
                    }
                  },
                  axisLabel: {
                    textStyle: {
                      fontStyle: "normal",
                      fontWeight: "normal",
                      color: "#666"
                    }
                  },
                  axisLine: {
                    lineStyle: {
                      color: "#9EC7DF"
                    }
                  },
                  axisTick: {
                    show: !1
                  }
                },
                yAxis: [{
                  type: "value",
                  name: "成交量（吨）",
                  splitLine: {
                    show: !0,
                    lineStyle: {
                      color: "#E3F0F8"
                    }
                  },
                  nameTextStyle: {
                    color: "#666"
                  },
                  axisLine: {
                    lineStyle: {
                      color: "#9EC7DF"
                    }
                  },
                  axisTick: {
                    lineStyle: {
                      color: "#9EC7DF"
                    }
                  },
                  axisLabel: {
                    textStyle: {
                      fontStyle: "normal",
                      fontWeight: "normal",
                      color: "#666"
                    },
                    formatter: function (e, t) {
                      var a = 0;
                      return a = 0 != e ? parseInt(e / 1e3) + "K" : a
                    }
                  }
                }, {
                  type: "value",
                  name: "订单数（笔）",
                  splitLine: {
                    show: !1,
                    lineStyle: {
                      color: "#E3F0F8"
                    }
                  },
                  axisLabel: {
                    textStyle: {
                      fontStyle: "normal",
                      fontWeight: "normal",
                      color: "#666"
                    }
                  },
                  nameTextStyle: {
                    color: "#666"
                  },
                  axisLine: {
                    lineStyle: {
                      color: "#9EC7DF"
                    }
                  },
                  axisTick: {
                    lineStyle: {
                      color: "#9EC7DF"
                    }
                  }
                }],
                series: [{
                  name: "上周成交量",
                  type: "bar",
                  data: []
                }, {
                  name: "本周成交量",
                  type: "bar",
                  data: []
                }, {
                  name: "上周订单数",
                  type: "line",
                  yAxisIndex: 1,
                  hoverAnimation: !1,
                  data: []
                }, {
                  name: "本周订单数",
                  type: "line",
                  yAxisIndex: 1,
                  hoverAnimation: !1,
                  data: []
                }]
              };

            function csChartFuc(e) {
              e ? (cscharts("#cs_container1", 1, ["#3CA6FA", "#FDCA8B"]), cscharts("#cs_container2", 2, ["#3CA6FA", "#FDCA8B"])) : ($.ajax({
                url: baseUrl + "trade/order/half",
                type: "GET",
                dataType: "json",
                success: function (e) {
                  e ? (orderTonnage = e, cscharts("#cs_container1", 1, ["#3CA6FA", "#FDCA8B"])) : 1 != orderTonnage.bankSteelErr && cscharts("#cs_container1", 1, ["#3CA6FA", "#FDCA8B"])
                },
                error: function () {}
              }), $.ajax({
                url: baseUrl + "trade/deal/week",
                type: "GET",
                dataType: "json",
                success: function (e) {
                  e ? (tonnage = e, cscharts("#cs_container2", 2, ["#3CA6FA", "#FDCA8B"])) : 1 != tonnage.bankSteelErr && cscharts("#cs_container2", 2, ["#3CA6FA", "#FDCA8B"])
                },
                error: function () {}
              })), $.ajax({
                url: baseUrl + "trade/deal/week/last",
                type: "GET",
                dataType: "json",
                success: function (e) {
                  e && $("#cs_count2").text(Math.round(e))
                },
                error: function () {}
              })
            }

            function cscharts(e, t, a) {
              var i = {},
                o = ["8:00", "8:30", "9:00", "9:30", "10:00", "10:30", "11:00", "11:30", "12:00", "12:30", "13:00", "13:30", "14:00", "14:30", "15:00", "15:30", "16:00", "16:30", "17:00", "17:30", "18:00", "18:30", "19:00"];
              if (1 == t) {
                for (var n = [], c = [], s = [], l = [], r = 0, i = orderTonnage, d = 0; d < 23; d += 1) i.today.amt[o[d]] ? (n[d] = parseFloat((i.today.amt[o[d]] / 1e4).toFixed(0)), r < n[d] && (r = n[d])) : n[d] = 0, i.lastDay.amt[o[d]] ? (c[d] = parseFloat((i.lastDay.amt[o[d]] / 1e4).toFixed(0)), r < c[d] && (r = c[d])) : c[d] = 0, i.today.weight[o[d]] ? (s[d] = parseFloat(i.today.weight[o[d]]), s[d] = parseFloat(s[d].toFixed(0))) : s[d] = 0, i.lastDay.weight[o[d]] ? (l[d] = parseFloat(i.lastDay.weight[o[d]]), l[d] = parseFloat(l[d].toFixed(0))) : l[d] = 0;
                r = 1e3 * parseInt(r / 1e3) + 1e3, myChart.setOption({
                  xAxis: {
                    type: "category",
                    splitLine: {
                      show: !0,
                      lineStyle: {
                        color: "#E3F0F8"
                      }
                    },
                    axisLabel: {
                      interval: 0,
                      formatter: function (e, t) {
                        return 0 == t % 3 ? e : ""
                      }
                    },
                    axisLine: {
                      lineStyle: {
                        color: "#9EC7DF"
                      }
                    },
                    axisTick: {
                      show: !1
                    },
                    data: o
                  },
                  series: [{
                    name: "昨日下单量",
                    type: "bar",
                    barWidth: "20%",
                    data: l
                  }, {
                    name: "今日下单量",
                    type: "bar",
                    barWidth: "20%",
                    data: s
                  }, {
                    name: "昨日下单额",
                    type: "line",
                    symbol: "circle",
                    symbolSize: 6,
                    smooth: !0,
                    hoverAnimation: !1,
                    lineStyle: {
                      normal: {
                        width: 1
                      }
                    },
                    data: c
                  }, {
                    name: "今日下单额",
                    type: "line",
                    symbol: "circle",
                    symbolSize: 6,
                    smooth: !0,
                    hoverAnimation: !1,
                    lineStyle: {
                      normal: {
                        width: 1
                      }
                    },
                    data: n
                  }]
                })
              } else if (2 == t) {
                for (var n = [], c = [], s = [], l = [], o = (i = tonnage, ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]), h = 0, u = 0, d = 0; d < 7; d++) n[d] = parseFloat(i.currentWeek.count[d + 1]), c[d] = parseFloat(i.lastWeek.count[d + 1]), s[d] = parseFloat(i.currentWeek.weight[d + 1]), l[d] = parseFloat(i.lastWeek.weight[d + 1]), s[d] && (s[d] = parseFloat(Math.round(s[d])), h += s[d]), l[d] && (l[d] = parseFloat(Math.round(l[d])), u += l[d]);
                $("#cs_count1").text(h), $("#cs_count3").text(u), myChart1.setOption({
                  xAxis: {
                    type: "category",
                    splitLine: {
                      show: !0,
                      lineStyle: {
                        color: "#E3F0F8"
                      }
                    },
                    axisLabel: {
                      interval: 0
                    },
                    axisLine: {
                      lineStyle: {
                        color: "#9EC7DF"
                      }
                    },
                    axisTick: {
                      show: !1
                    },
                    data: o
                  },
                  series: [{
                    name: "上周成交量",
                    type: "bar",
                    barWidth: "20%",
                    data: l
                  }, {
                    name: "本周成交量",
                    type: "bar",
                    barWidth: "20%",
                    data: s
                  }, {
                    name: "上周订单数",
                    type: "line",
                    symbol: "circle",
                    symbolSize: 6,
                    smooth: !0,
                    hoverAnimation: !1,
                    lineStyle: {
                      normal: {
                        width: 1
                      }
                    },
                    data: c
                  }, {
                    name: "本周订单数",
                    type: "line",
                    symbol: "circle",
                    symbolSize: 6,
                    smooth: !0,
                    hoverAnimation: !1,
                    lineStyle: {
                      normal: {
                        width: 1
                      }
                    },
                    data: n
                  }]
                })
              }
            }

            function chaoshiCount() {
              $("#todayOrderTonnage").text();
              $.ajax({
                url: baseUrl + "trade/deal/total",
                type: "GET",
                dataType: "json",
                success: function (e) {
                  e.yesterday && $("#lastDaySuccessTonnage").text(Math.round(e.yesterday));
                  e.today;
                  var t = formatDate1(new Date(e.updateTime));
                  $("#new_time").text(t), $("#todayOrderTonnage").fadeOut("slow"), $("#todayOrderTonnage").text(Math.round(e.today)), $("#todayOrderTonnage").fadeIn("slow")
                }
              });
              var e = (new Date).getTime(),
                t = formatDate(new Date),
                a = (new Date).getDay(),
                i = new Date(t).getTime() - 18e5,
                t = new Date(t).getTime() + 396e5;
              i <= e && e <= t && 0 != a && 6 != a ? $("#new_time").parent(".new-time").addClass("on") : $("#new_time").parent(".new-time").removeClass("on")
            }
            myChart1.setOption(option1), csChartFuc(!0), chaoshiCount(), setInterval(function () {
              csChartFuc(), chaoshiCount()
            }, 6e4), $("#cs_container1").click(function () {
              window.location.href = "//www.banksteel.com/data/?from=chart"
            }), $("#cs_container2").click(function () {
              window.location.href = "//www.banksteel.com/data/?from=chart"
            }), $(".ladyPrice-01").slide({
              mainCell: ".priceList",
              effect: "leftLoop",
              vis: 1,
              pnLoop: !1
            }), $(".ladyPrice").hover(function () {
              $(this).children(".prev").show(), $(this).children(".next").show()
            }, function () {
              $(this).children(".prev").hide(), $(this).children(".next").hide()
            });
            var priceCity01 = [],
              priceCity02 = [],
              priceCity03 = [],
              priceCity04 = [],
              priceCity = [{}, {}, {}, {}];

            function getCity(i) {
              $.ajax({
                url: baseApiUrl + "guideprice/queryCity.jsp?categoryCode=" + i,
                type: "GET",
                dataType: "json",
                success: function (e) {
                  if (e) {
                    e = e.data;
                    for (var t = {}, a = 0; a < e.length; a++) t[e[a].cityCode] = e[a].cityName;
                    "01" == i && (priceCity01 = e, priceCity[0] = t, cityChange("01")), "02" == i && (priceCity02 = e, priceCity[1] = t), "03" == i && (priceCity03 = e, priceCity[2] = t), "04" == i && (priceCity04 = e, priceCity[3] = t)
                  }
                }
              })
            }

            function cityChange(e) {
              var t, a = "";
              "01" == e && (t = priceCity01), "02" == e && (t = priceCity02), "03" == e && (t = priceCity03), "04" == e && (t = priceCity04);
              for (var i = 0; i < t.length; i++) a += '<li data-id="' + t[i].cityCode + '">' + t[i].cityName + "</li>";
              $(".city-content .content-inner").html(a)
            }

            function csPrice(r, e, t) {
              $.ajax({
                url: baseApiUrl + "guideprice/query.jsp?categoryCode=" + r + "&city=" + e,
                type: "GET",
                dataType: "json",
                success: function (e) {
                  if (e) {
                    e = e.data;
                    for (var t = '<div class="priceList"><ul>', a = 0; a < e.length; a++) {
                      i = a % 2 == 0 ? (a + 2) % 4 == 0 || (a + 1) % 4 == 0 ? "price-l price-b" : "price-l" : (a + 2) % 4 == 0 || (a + 1) % 4 == 0 ? "price-r price-b" : "price-r";
                      var i, o = "",
                        n = "",
                        c = "",
                        s = "",
                        l = "";
                      1 == e[a].priceType ? (n = "开盘价", c = "较收盘", s = 3 == e[a].fluctuationSign ? "较上日收盘+" + (e[a].price ? e[a].fluctuationPrice : "-") : 1 == e[a].fluctuationSign ? "较上日收盘" + (e[a].price ? e[a].fluctuationPrice : "-") : "较上日收盘" + (e[a].price ? "持平" : "-")) : 2 == e[a].priceType ? (n = "收盘价", c = "较开盘", s = 3 == e[a].fluctuationSign ? "较当日开盘+" + (e[a].price ? e[a].fluctuationPrice : "-") : 1 == e[a].fluctuationSign ? "较当日开盘" + (e[a].price ? e[a].fluctuationPrice : "-") : "较当日开盘" + (e[a].price ? "持平" : "-")) : (n = "价格", c = "涨跌"), e[a].weightWay && ("1" == e[a].weightWay ? l = "理计" : "2" == e[a].weightWay ? l = "过磅" : "3" == e[a].weightWay && (l = "抄码")), o = 3 == e[a].fluctuationSign ? '<div class="conten2 up"><div class="conten2-l"><div class="tit">' + n + '</div><div class="det" title="' + l + '">' + (e[a].price || "-") + '<i></i></div></div><div class="conten2-r" title="' + s + '"><div class="tit">' + c + '</div><div class="det">+' + (e[a].price ? e[a].fluctuationPrice : "-") + "</div></div>" : 1 == e[a].fluctuationSign ? '<div class="conten2 down"><div class="conten2-l"><div class="tit">' + n + '</div><div class="det" title="' + l + '">' + (e[a].price || "-") + '<i></i></div></div><div class="conten2-r" title="' + s + '"><div class="tit">' + c + '</div><div class="det">' + (e[a].price ? e[a].fluctuationPrice : "-") + "</div></div>" : '<div class="conten2 flat"><div class="conten2-l"><div class="tit">' + n + '</div><div class="det" title="' + l + '">' + (e[a].price || "-") + '</div></div><div class="conten2-r" title="' + s + '"><div class="tit">' + c + '</div><div class="det">' + (e[a].price ? "持平" : "-") + "</div></div>", dateFormatDay(e[a].priceTime) == dateFormatDay(new Date) ? t += '<li class="' + i + ' price-dialog" data-chart="' + e[a].cityCode + "," + e[a].factoryCode + "," + e[a].breedCode + "," + e[a].materialCode + "," + e[a].specName + "," + e[a].cityName + "," + e[a].factoryName + "," + e[a].breedName + "," + e[a].materialName + '"><div class="conten1"><span class="s1" title="' + e[a].breedName + " " + e[a].materialName + " " + e[a].specName + '">' + e[a].breedName + " " + e[a].materialName + " " + e[a].specName + '</span><span class="s2">' + e[a].factoryName + "</span></div>" + o + '</div><div class="conten3"><span class="c1">' + e[a].cityName + '</span><span class="c2">' + (e[a].price ? dateFormat(e[a].priceTime) : "-") + "</span></div></li>" : t += '<li class="' + i + ' not-today price-dialog" data-chart="' + e[a].cityCode + "," + e[a].factoryCode + "," + e[a].breedCode + "," + e[a].materialCode + "," + e[a].specName + "," + e[a].cityName + "," + e[a].factoryName + "," + e[a].breedName + "," + e[a].materialName + '"><div class="conten1"><span class="s1" title="' + e[a].breedName + " " + e[a].materialName + " " + e[a].specName + '">' + e[a].breedName + " " + e[a].materialName + " " + e[a].specName + '</span><span class="s2">' + e[a].factoryName + "</span></div>" + o + '</div><div class="conten3"><span class="c1">' + e[a].cityName + '</span><span class="c2">' + (e[a].price ? dateFormat(e[a].priceTime) : "-") + "</span></div></li>", (a + 1) % 4 == 0 && 0 != a && a + 1 != e.length && (t += "</ul><ul>"), a + 1 == e.length && (t += "</ul>")
                    }
                    t += '</div><a class="prev" href="javascript:void(0)"><i></i></a> <a class="next" href="javascript:void(0)"><i></i></a>', $(".ladyPrice-" + r).html(t), $(".ladyPrice-" + r).siblings().hide(), $(".ladyPrice-" + r).show(), $(".ladyPrice-" + r).slide({
                      mainCell: ".priceList",
                      effect: "leftLoop",
                      vis: 1,
                      pnLoop: !1
                    })
                  }
                }
              })
            }
            getCity("01"), getCity("02"), getCity("03"), getCity("04"), $(".ptice-tab li").click(function () {
              var e = $(this).attr("data-id"),
                t = (cityChange(e), $(".city-content .conten").attr("data-id"));
              priceCity[parseInt(e) - 1][t] ? csPrice(e, t) : (csPrice(e, "310100"), $(".city-content .conten").attr("data-id", "310100"), $(".city-content .conten").text("上海")), $(this).siblings().removeClass("on"), $(this).addClass("on")
            }), $(".city-content .conten").click(function (e) {
              $(".city-content").toggleClass("on"), e.stopPropagation()
            }), $(".city-content .content-inner").on("click", "li", function () {
              $(".city-content .conten").text($(this).text());
              var e = $(this).attr("data-id");
              $(".city-content .conten").attr("data-id", e), csPrice($(".ptice-tab li.on").attr("data-id"), e)
            }), $(document).click(function () {
              $(".city-content").hasClass("on") && $(".city-content").removeClass("on")
            }), $(document).on("click", ".banner .bd a", function () {
              sensors.track("adHomeBannerBigClick", {
                advert_url: $(this).attr("href"),
                advert_order: $(this).parent().index() + 1
              }, function () {})
            }), $(document).on("click", ".side-bottom-ad a", function () {
              sensors.track("adHomeBannerMediumClick", {
                advert_url: $(this).attr("href"),
                advert_order: $(this).index() + 1
              }, function () {})
            }), $(".wrap-tjsj").on("click", ".shop-content a", function () {
              sensors.track("adHomeMidClick", {
                advert_url: $(this).attr("href"),
                advert_order: $(this).parent().index() + 1
              }, function () {})
            }), $(".wrap-shops").on("click", ".shop-content a", function () {
              sensors.track("adHomeRecShopClick", {
                advert_url: $(this).attr("href"),
                advert_order: $(this).parent().index() + 1 + 18 * $(this).closest(".shop-content").index()
              }, function () {})
            })
          });
          var timer = null,
            count = 60;

          function code(e) {
            var t = document.getElementById(e).value,
              n = new RegExp(/^(((13[0-9]{1})|(14[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(17[0-9]{1})|(18[0-9]{1})|(19[0-9]{1}))+\d{8})$/);
            return "" == t ? (alert("号码不能为空！"), !1) : n.test(t) ? ($("#mobile").data("plugin_validateSlide").show(), !0) : (alert("号码请填写规范!"), document.getElementById(e).value = "", !1)
          }

          function timeOut() {
            $(".fl-ass-submit button").prop("disabled", !0), timer = setInterval(function () {
              0 < count ? ($(".fl-ass-submit button").text(count + " 秒后重发"), count--) : (clearInterval(timer), timer = null, count = 60, $(".fl-ass-submit button").text("发送"), $(".fl-ass-submit button").prop("disabled", !1))
            }, 1e3)
          }

          function loadUrl(e) {
            (document.getElementsByTagName("head")[0] || document.body).appendChild(document.createElement("iframe")).src = e
          }
          $(function () {
            $(".fl-open-wrap").click(function () {
              $(this).animate({
                left: "-206px"
              }, 500, function () {
                $(".fl-ass-wrap").css({
                  display: "block"
                }).animate({
                  left: "0"
                }, 1e3)
              })
            }), $(".fl-ass-close").click(function () {
              $(".fl-ass-wrap").animate({
                left: "-100%"
              }, 1e3, function () {
                $(".fl-open-wrap").animate({
                  left: "0px"
                }, 500)
              })
            }), $("#mobile").validateSlide({
              type: 11,
              checkUrl: "https://member.banksteel.com/member/code_x_check.htm",
              imageCodeUrl: "https://member.banksteel.com/member/image_code_info.htm",
              success: function () {
                if (timer) return !1;
                var e = "mobile=" + $("#mobile").val() + "&type=11";
                $.ajax({
                  url: "https://member.banksteel.com/member/send_mobile_code.htm?" + e,
                  xhrFields: {
                    withCredentials: !0
                  },
                  success: function (e) {
                    ("fail" == e.actionStatus ? (count = e.actionMessage.split("|")[1], timeOut(), dialog({
                      title: "提示",
                      content: '<div class="bounced">' + e.actionMessage.split("|")[0] + "</div>",
                      width: "380",
                      height: "70",
                      fixed: !0,
                      okValue: "确定",
                      ok: function () {}
                    })) : (timeOut(), dialog({
                      title: "提示",
                      content: '<div class="bounced">安装地址已发送,请注意查收！</div>',
                      width: "380",
                      height: "70",
                      fixed: !0,
                      okValue: "确定",
                      ok: function () {}
                    }))).show()
                  }
                })
              },
              error: function (e) {}
            })
          });
